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

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

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

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

28.01.2013, 00:19. Просмотров 428. Ответов 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;
}
Пс. Английские символы считает правильно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2013, 00:19     Не подсчитывает русские символы
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
28.01.2013, 01:27     Не подсчитывает русские символы #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
Не пойму в чём загвостка; логически вроде всё верно:
В кодировке дело. Попробуйте согласовать кодировки.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
28.01.2013, 01:35     Не подсчитывает русские символы #3
Проверял в Линукс.
В Экдипсе через дебаг - работает, просто запуском - нет.
Скомпилированный файл работает в любом случае (дебаг и релиз)
Кодировка utf8
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
28.01.2013, 01:44     Не подсчитывает русские символы #4
если локаль на русскую переключить, то работает.
C++
1
setlocale(LC_ALL, "Russian");
NoMasters
Псевдослучайный
1747 / 1090 / 71
Регистрация: 13.09.2011
Сообщений: 3,120
28.01.2013, 02:08     Не подсчитывает русские символы #5
Вроде работает. В чём проявляется проблема-то?
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"));
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
28.01.2013, 02:27     Не подсчитывает русские символы #7
vua72, на винде исключение выкидывает (g++ 4.7.0)
MrGluck
Модератор
Эксперт CЭксперт С++
7162 / 4328 / 632
Регистрация: 29.11.2010
Сообщений: 11,750
28.01.2013, 02:36     Не подсчитывает русские символы #8
C++
1
2
std::locale::global(std::locale(""));
setlocale(LC_ALL, "");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2013, 13:24     Не подсчитывает русские символы
Еще ссылки по теме:

Русские символы в массиве char - C++
имеется функция возвращающая массив байтов(символов), если данная строка английское слово то все нормально, иначе получается...

Русские символы в Visual Studio - C++
Здравствуйте. Проект на си пишется в Visual Studio 08 Общий смысл проблемы таков : на вход поступают строки данных в...

Cin не видит русские символы - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include &lt;stdlib.h&gt; #include &lt;cstring&gt; #include...

Парсер, поддерживающий русские символы - C++
Здравствуйте! Имеется .txt файл, из которого нужно считать слова и числа игнорируя знаки препинания и прочее. Слова могут быть русские. Как...


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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
303 / 274 / 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 работает не очень(
Yandex
Объявления
28.01.2013, 13:24     Не подсчитывает русские символы
Ответ Создать тему
Опции темы

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