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

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

Восстановить пароль Регистрация
 
xtorne21st
интересующийся
300 / 271 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
28.01.2013, 00:19     Не подсчитывает русские символы #1
Не пойму в чём загвостка; логически вроде всё верно:
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     Не подсчитывает русские символы
Посмотрите здесь:

C++ Не печатает русские символы
C++ Русские символы!!!!
Русские символы C++
Русские символы в BC31 C++
C++ Русские символы из ASCII
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
28.01.2013, 01:27     Не подсчитывает русские символы #2
Цитата Сообщение от xtorne21st Посмотреть сообщение
Не пойму в чём загвостка; логически вроде всё верно:
В кодировке дело. Попробуйте согласовать кодировки.
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
28.01.2013, 01:35     Не подсчитывает русские символы #3
Проверял в Линукс.
В Экдипсе через дебаг - работает, просто запуском - нет.
Скомпилированный файл работает в любом случае (дебаг и релиз)
Кодировка utf8
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
28.01.2013, 01:44     Не подсчитывает русские символы #4
если локаль на русскую переключить, то работает.
C++
1
setlocale(LC_ALL, "Russian");
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,094
28.01.2013, 02:08     Не подсчитывает русские символы #5
Вроде работает. В чём проявляется проблема-то?
vua72
410 / 410 / 83
Регистрация: 28.11.2010
Сообщений: 1,158
28.01.2013, 02:17     Не подсчитывает русские символы #6
а так и в eclipse заработало
C++
1
std::locale::global(std::locale("C.UTF-8"));
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
28.01.2013, 02:27     Не подсчитывает русские символы #7
vua72, на винде исключение выкидывает (g++ 4.7.0)
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
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     Не подсчитывает русские символы
Еще ссылки по теме:

Русские символы и substr C++
Русские символы C++
C++ Не выводятся русские символы

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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
300 / 271 / 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     Не подсчитывает русские символы
Ответ Создать тему
Опции темы

Текущее время: 07:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru