Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 31.08.2017
Сообщений: 1

Программа не работает с русскими символами

31.08.2017, 10:05. Показов 963. Ответов 4

Студворк — интернет-сервис помощи студентам
Программа должна находить два самых часто встречающихся символа и вывести их.Потом убрать лишние пробелы и эти часто встречающиеся символы,если они стоят рядом друг с другом. С английской строкой проблем нет. При вводе русской, только удаляет пробелы.

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#include <iostream>
#include <locale.h>
#include <fstream>
using namespace std;
//имена файлов
const char *f1name = "Text.txt";
const int Nmax = 30; //макс. размер строки
 
//Открытие файла
int  Inputstr(char str[Nmax], int &LenStr);
 
//ввывод сообщений об ошибках
void printmassage(int Errcode, const char * file);
 
//Находим два часто встречающихся символа
void FindSumbol(int counts[], int &index, int &index2, int& LenStr, char str[]);
 
//Сжатие строки
void СompressionStr(char str[], int &index, int &index2);
 
 
 
int main()
{
    int i = 0;
    int j = 0;
    char Errcode; //результат фунцкции, проверяет если при чтении файла ошибки
    int LenStr = 0;//кол-во эл-тов в строках
    char str[Nmax] = { ' ' };   //массив эл-тов строк
    int counts[256];
    int index = 0;             //индекс первого символа
    int index2 = 0;           //индекс второго символа
    setlocale(LC_ALL, "RUSSIAN");   //подключение русского языка
    system("color F0");         //экран белый, буквы черные
    system("cls");          //очистка экрана
    
 
    Errcode = Inputstr(str, LenStr);//вызов функции - чтение из файла
                                    //проверяет,есть ли ошибки при чтении из файла
 
 
    if (Errcode != 0)//ошибки есть
    {
        printmassage(Errcode, f1name);
        system("pause");
        return 3;
    }//if
 
     //ошибок нет
 
    cout <<"Исходная строка: "<< str << endl;
    cout << "Длина строки : " << LenStr << endl;
    FindSumbol(counts, index, index2, LenStr, str);
    СompressionStr(str, index, index2);
    system("PAUSE");
    return 0;
}
 
int Inputstr(char str[Nmax], int& LenStr)
{
    int i;
    //потоковый ввод из файла
    ifstream finame(f1name); //открытие файла
 
    if (!finame)    //проверка на существование файла
    {
        finame.close();     //закрытие файла
        return 1;
    }//if
 
    if (finame.peek() == EOF)              //Проверка файла на пустоту.
    {
        finame.close();     //закрытие файла
        return 2;
    }
 
    finame.getline(str, Nmax);
 
    for (i = 0; i<Nmax; i++) // Поиск длины строки.
    {
        if (str[i] == '\0')// При встрече терминированного нуля запись в переменную этого элемента и выход из цикла
        {
            LenStr = i;
            break;
        } //End if
    }//End for j
 
 
 
    finame.close();     //закрытие файла
    return 0;
}
 
//Находим два часто встречающихся символа
void FindSumbol(int counts[], int &index, int &index2, int& LenStr, char str[])
{
    int i;
    //Создаем новый массив счетчик
    for (i = 0; i < 255; i++)
    {
        counts[i] = 0;
    }//for
 
    for (i = 0; i < LenStr; i++)
    {
        counts[str[i]]++;
    }//for
 
     //Обнуление количества посчитанных в строке пробелов
    counts[' '] = 0;
    int max1 = 0; //первый часто встречающийся символ
    int max2 = 0;//второй часто встречающийся символ
 
    for (i = 0; i < 255; i++)
    {
        if (max1 < counts[i])
        {
            max1 = counts[i];
            index = i;
        }//if
    }//for
    counts[index] = 0;
 
    for (i = 0; i < 255; i++)
    {
        if (max2 < counts[i])
        {
            max2 = counts[i];
            index2 = i;
        }//if
    }//for
     //Печать символов 
 
    cout << (char)index << " " << (char)index2 << endl;
 
 
}
 
 
 
//Сжатие строки
void СompressionStr(char str[], int &index, int &index2)
{
    int i = 0; int j = 0;
 
    while (str[i + 1] != '\0')
    {
 
        if ((str[i] == ' ') && (str[i + 1] == ' '))
        {
            j = i + 1;
            while (str[j] != '\0')
            {
                str[j] = str[j + 1];
                j++;
            }//while
            str[j - 1] = '\0';
        }
        else
            i++;
    }
 
    cout << "Новая строка, после исключения пробелов: ";
    cout << str << endl;
 
    i = 0; j = 0;
 
    while (str[i + 1] != '\0')
    {
        if ((str[i] == (char)index && str[i + 1] == (char)index2) || (str[i] == (char)index2 && str[i + 1] == (char)index))
        {
            j = i + 2;
            while ('\0' != str[j])
            {
                str[j - 2] = str[j];
                j++;
            }//while
            str[j - 2] = '\0';
        }
        else
            i++;
    }
    cout << "Новая строка, после исключения символов: ";
 
    cout << str << endl;
}
 
void printmassage(int Errcode, const char * file)
{
    switch (Errcode)
    {
    case 1: cout << "Файл " << file << " не найден!" << endl;
        return;
    case 2: cout << "Файл пустой" << endl;
        return;
    case 3: cout << "Неверное количество элементов в Text.txt" << endl;
        return;
    }
}
Миниатюры
Программа не работает с русскими символами   Программа не работает с русскими символами  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.08.2017, 10:05
Ответы с готовыми решениями:

Проблемы с русскими символами
#include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;locale.h&gt; int main() { setlocale(LC_ALL, &quot;Russian&quot;); char...

Regex с русскими символами
Привет всем! что надо сделать чтобы работала регулярное выражение с русскими буквами ? регулярные выражение пользуюсь из boost...использую...

Длина строки с русскими символами
Всем привет! Возможно, заезженный вопрос, но толкового решения так и не нашел. ВАЖНО: Работаю на XCode под MaxOS 10.14.1 Допустим: ...

4
 Аватар для vlisp
1060 / 981 / 153
Регистрация: 10.08.2015
Сообщений: 5,324
31.08.2017, 10:43
Гугли кодировки и кодовые страницы, в частности чем отличаются СР866 и СР1251
0
Одессит
 Аватар для kylroma
243 / 88 / 44
Регистрация: 30.12.2013
Сообщений: 316
Записей в блоге: 2
31.08.2017, 11:32
Программа не работает с русскими символами
серп и молот не показывает, что ли? Или речь о кириллице?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
31.08.2017, 16:03
И что, собственно, не работает?
0
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
31.08.2017, 16:10
YoungProg, компилировать надо Отечественным компилятором
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.08.2017, 16:10
Помогаю со студенческими работами здесь

Неправильная работа с русскими символами
Проблема: если в пути к файлу ifstream есть русские символы - файл не находится. В качестве пути передаю wstring.c_str();. Как это...

Вывод русскими символами в файл
В файл записывает краказябры. SetConsoleCP(1251); SetConsoleOutputCP(1251); Не помогает. Вот код #include...

FLTK 1.3.3 не могу подружить с русскими символами
FLTK 1.3.3 не могу подружить с русскими символами. Выводит иероглифы в заголовке окна в окне.... менял шрифты Fl::setfont();...

Ошибка при компиляции в программе с русскими символами
Пытаюсь сделать задание из соседней ветки. Вот код: #include &lt;iostream&gt; int cnt_rus(const wchar_t * line, const wchar_t * rus_line) ...

Как реализовать сравнение строк с русскими символами
Дело обстоит так: Нужно сравнить на сходство русские слова. Пробовал strcmp - но она что-то лениться с не англоязычными символами работать...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru