Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Не подсчитывает русские символы - C++

28.01.2013, 00:19. Просмотров 433. Ответов 8
Метки нет (Все метки)

Не пойму в чём загвостка; логически вроде всё верно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stdexcept>
 
int main()
{
    try {
    std::locale::global(std::locale(""));
    } catch (std::runtime_error bad_locale_error) {
        std::cerr << "Couldn't set global locale: " << bad_locale_error.what() << std::endl;
        exit(1);
    }
 
    std::string file_name;
    std::cout << "Enter pls name of file: ";
    std::getline(std::cin, file_name);
 
    std::wifstream input_file(file_name.c_str(), std::ios::in);
    if (!input_file) {
        std::cerr << "Couldn't open file" << std::endl;
        exit(1);
    }
 
    const wchar_t *eng_alpha = L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
    const wchar_t *rus_alpha = L"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
 
    size_t eng_count = 0, rus_count = 0;
    for (wchar_t c; !input_file.eof(); ) {
        input_file >> c;
        if (wcschr(eng_alpha, c))
            ++eng_count;
        else if (wcschr(rus_alpha, c))
            ++rus_count;
    }
    std::cout << "Russian characters: " << rus_count << std::endl;
    std::cout << "English characters: " << eng_count << std::endl;
 
    input_file.close();
    if (input_file.good()) {
        std::cerr << "A file error occurred" << std::endl;
        exit(1);
    }
        
    return 0;
}
Пс. Английские символы считает правильно.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 00:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не подсчитывает русские символы (C++):

Широкие символы wchar_t wstring не хотят принимать русские символы - C++
Собственно вопрос в шапке, вот примеры: std::wstring str = L&quot;блин комом&quot;; и такое: wchar_t stroka = L&quot;abcdefghijklmnopqrstuvwxyz...

Русские символы!!!! - C++
Для русских символов я использую библиотеку #include &lt;russian.h&gt; Все работает нормально без using namespace std; #include...

Русские символы - C++
Подскажите пожалуйста как сделать правильный вывод русского алфавита, так как при выводе выдает иероглифы, есть задавать данные изначально,...

Русские символы - C++
Написал программу. Компилю из под cygwin g++. Ругается: 4.cpp:27:18: предупреждение: многознаковая символьная константа if((str...

Не печатает русские символы - C++
Возник такой вопрос. Почему в консоле не выводятся кирилические символы? Когда я использую такой код: cout &lt;&lt; &quot;Проверка&quot; выводится не...

Case и русские символы - C++
Здравствуйте, Есть массив char text в котором лежат буквы. При проверке лежит ли в данном месте определённая буква,компилятор...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
28.01.2013, 01:27 #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
Не пойму в чём загвостка; логически вроде всё верно:
В кодировке дело. Попробуйте согласовать кодировки.
1
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
28.01.2013, 01:35 #3
Проверял в Линукс.
В Экдипсе через дебаг - работает, просто запуском - нет.
Скомпилированный файл работает в любом случае (дебаг и релиз)
Кодировка utf8
1
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
28.01.2013, 01:44 #4
если локаль на русскую переключить, то работает.
C++
1
setlocale(LC_ALL, "Russian");
1
NoMasters
Псевдослучайный
1754 / 1097 / 72
Регистрация: 13.09.2011
Сообщений: 3,134
28.01.2013, 02:08 #5
Вроде работает. В чём проявляется проблема-то?
1
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
28.01.2013, 02:17 #6
а так и в eclipse заработало
C++
1
std::locale::global(std::locale("C.UTF-8"));
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
28.01.2013, 02:27 #7
vua72, на винде исключение выкидывает (g++ 4.7.0)
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,927
28.01.2013, 02:36 #8
C++
1
2
std::locale::global(std::locale(""));
setlocale(LC_ALL, "");
1
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.01.2013, 13:24  [ТС] #9
Всем спасибо за отзывы! Компилировал на Убунте. Системная локаль en_US.utf8. Проблема в том, что не подсчитывает исключительно русские символы. Завтра выполню корректировку согласно вашим рекомендациям и отпишусь.

Добавлено через 10 часов 28 минут
Лол это просто хохма:
Bash
1
2
3
4
5
6
7
8
9
10
11
ilyuha21st@coldshoot:~/projects/EXAMPLES/IO$ clang++ temp.cpp -o prog
ilyuha21st@coldshoot:~/projects/EXAMPLES/IO$ ./prog
Enter pls name of file: temp.cpp
Russian characters: 0
English characters: 910
ilyuha21st@coldshoot:~/projects/EXAMPLES/IO$ g++ temp.cpp -o prog
ilyuha21st@coldshoot:~/projects/EXAMPLES/IO$ ./prog
Enter pls name of file: temp.cpp
Russian characters: 66
English characters: 910
ilyuha21st@coldshoot:~/projects/EXAMPLES/IO$
А мне до этого момента казалось, что clang и gcc практически идиентичны (не считая llvm поддержки в пользу первого)

Добавлено через 2 минуты
Во всяком случаи с локалью clang работает не очень(
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2013, 13:24
Привет! Вот еще темы с ответами:

Не выводятся русские символы - C++
Программа не может вывести русские символы, но если оставить только функцию main то все отображается нормально #include &lt;iostream&gt; ...

Русские символы и substr - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); string sTmp; ...

Русские символы из ASCII - C++
Программа отправляет &quot;POST&quot; запрос в гугл Speech и сохраняет ответ. Но сохраняет в ASCII. Текстовый редактор читает это нормально, а вот...

Русские символы в BC31 - C++
Как в Borland C++ 3.1 печатать русские буквы?? И как их считать их файла?? CharToOem не работает.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.01.2013, 13:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru