Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 22.02.2021
Сообщений: 4

Подсчет русских символов и цифр в строке

19.12.2022, 12:00. Показов 897. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программа неверно считает количество русских букв и цифр в строке. В чем может быть проблема?
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
private: System::Void button7_Click(System::Object^ sender, System::EventArgs^ e) {
 
    if (richTextBox1->Text == L"") { MessageBox::Show("Текст не был введен!", "Индивидуальное задание #240. Ошибка ввода!", MessageBoxButtons::OK, MessageBoxIcon::Warning); }
 
    String^ strokaTest = richTextBox1->Text;
    int countRussianLetters = 0;
    int countNumbers = 0;
    char temp = 0;
 
    for (int i = 0; i < strokaTest->Length; i++) {
        temp = strokaTest[i];
        if (temp >= 'а' && temp <= 'я') { countRussianLetters++;  } // строчные русские буквы в кодировке ASCII
        if (temp >= 'А' && temp <= 'Я') { countRussianLetters++; } // заглавные русские буквы в кодировке ASCII
        if (temp >= 48 && temp <= 57) { countNumbers++; }         // цифры в кодировке ASCII
 
    }
 
    if (countRussianLetters > countNumbers) {
        label8->Text = L"Кол - во русских букв: " + countRussianLetters;
        label9->Text = L"Кол - во цифр: " + countNumbers;
        label10->Text = L"Русских букв в тексте больше, чем цифр.";
    }
    if (countRussianLetters < countNumbers) {
        label8->Text = L"Кол - во русских букв: " + countRussianLetters;
        label9->Text = L"Кол - во цифр: " + countNumbers;
        label10->Text = L"Цифр в тексте больше, чем русских букв. ";
    }
    if (countRussianLetters = countNumbers) {
        label8->Text = L"Кол - во русских букв: " + countRussianLetters;
        label9->Text = L"Кол - во цифр: " + countNumbers;
        label10->Text = L"Одинаковое количество русских букв и цифр в тексте.";
    }
    }
Например, если вписать в RichTextBox "123 привет", программа выводит
Кол-во русских букв: 6
Кол-во цифр: 6
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2022, 12:00
Ответы с готовыми решениями:

Подсчет русских символов в строке
Не получается считать русские символы, кто-нибудь может помочь? #include &lt;iostream&gt; #include &lt;cstdlib&gt; // для getline ...

Подсчет цифр, символов-разделителей и прочих символов в строке
#include &lt;stdio.h&gt; #include &lt;locale.h&gt; /* подсчет цифр, символов-разделителей и прочих символов */ main() { ...

Подсчет цифр, заглавных и строчных русских букв, заглавных и строчных английских букв, пробелов и спец символов
Ситуация такая, что строчные русские буквы код считает как большие и добавляет еще счетчик спец символов. В файле написал просто одну...

11
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2022, 13:07
strokaTest в юникоде же будет. wchar_t используй и L.
0
0 / 0 / 0
Регистрация: 22.02.2021
Сообщений: 4
19.12.2022, 13:32  [ТС]
что такое "L"?
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
19.12.2022, 14:25
текс "RichTextBox1 " при вводе строки видно?
0
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
19.12.2022, 14:51
Можно решить в лоб. Просто создать массив русских букв и потом их искать сравнением.
Вообще работа с кодировками крайне неблагодарное дело.
У вас там написано в коментах про ASCII так вот ASCII не содержит и несодержал никогда русских букв.
Русские буквы содержат всякие кодировки сделанные на основе ASCII например кои7 и т.п. Во первых они сами по себе старье которое нигде не используется, во вторых там русские буквы нифига не одним "островком" сделаны. Тоесть условием от 'а' до 'я' нихрена вы их не поймаете, потому что например буква 'я' там кудато отдельно закинута в другой области. За это можете сказать горячее спасибо умнейшим академикам советского союза которые эти кодировки создавали и утверждали на многочисленных симпозиумах и совещаниях с последующими орденами и премиями.

Вообще по сути дела сейчас везде используется кодировка UNICODE а в ней только ASCII символы по кодам сходлятся а русские задвинуты хрен знает куда.
Ещё учтите такой ньюанс что та среда разработки которую вы используете имеет свою кодировку в редакторе. То есть вы в тексте программы написали русскую "а" а там оказывается поставлена кодировка какаянибудь windows1251 и когда вы вводите с консоли то ничего не сравнивается потому что буква "а" в консоли имеет другую кодировку.

Добавлено через 6 минут
Цитата Сообщение от irenochka20 Посмотреть сообщение
String^ strokaTest = richTextBox1->Text;
судя по этой цитате вы вообще в С++ CLI
на вижуал студио работаете. А это я вам скажу то еще мутное занятие, особенно для новичков.

Попробуйте поэкспериментировать , выведите циклом в консоль все коды русских букв типа char потом выведите коды букв из ваших строчек string посмотрите что они собой представляют эти коды и как их сравнивать. Попробуйье убрать букву L перед строками посмотрите что изменится.

Добавлено через 6 минут
Я както занимался подобной задачей на С++ cli там ест куча команд с помощью которых текст char и текст полученный из текстбоксов можно привести в одну кодировку. Это все есть в разделе форума с++ CLI. вот ссылка: Преобразование между типами System::String, char*, wchar_t*, std::string и др.
1
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
19.12.2022, 15:12
Цитата Сообщение от Святогор Посмотреть сообщение
так вот ASCII не содержит и несодержал никогда русских букв
очень спорное утверждение
0
17 / 18 / 4
Регистрация: 27.06.2016
Сообщений: 236
19.12.2022, 15:21
Цитата Сообщение от повар1 Посмотреть сообщение
очень спорное утверждение
Юывают спорные утверждения. Но это не тот случай.
Не в обиду вам но вы ошибаетесь. Почитайте что такое стандарт ASCII и постомтрите его кодировки. ASCII это можно сказать святой грааль всего программирования, священный артефакт древности на котором построено все и везде.

Русские символы в него натолкали вместо псевдографики и прочих редко используемых символов и после этой операции это уже не ASCII а кои 7 , кои8 или CP866. Сам по себе ASCII имеет всего 128 символов никогда не содержал не содержит и не будет содержать никакихалфавитов кроме латинского. Он как памятник высечен на граните и никаких изменений никто в него не вносил и не будет вносить.
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2022, 15:56
Так, наверное.
C++
1
2
3
4
5
    wchar_t temp = 0;
 
    for (int i = 0; i < strokaTest->Length; i++) {
        temp = strokaTest[i];
        if (temp >= L'а' && temp <= L'я') { countRussianLetters++;  }
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2022, 15:57
Лучший ответ Сообщение было отмечено irenochka20 как решение

Решение

Так, наверное.
C++
1
2
3
4
5
    wchar_t temp = 0;
 
    for (int i = 0; i < strokaTest->Length; i++) {
        temp = strokaTest[i];
        if (temp >= L'а' && temp <= L'я') { countRussianLetters++;  }
0
0 / 0 / 0
Регистрация: 22.02.2021
Сообщений: 4
19.12.2022, 18:02  [ТС]
Спасибо, после некоторых изменений код заработал!

C++
1
2
3
4
5
6
    for (int i = 0; i < strokaTest->Length; i++) {
        wchar_t temp = strokaTest[i];
        if (temp >= L'а' && temp <= L'я') { countRussianLetters++; } // прописные русские буквы
        if (temp >= L'А' && temp <= L'Я') { countRussianLetters++; } // строчные русские буквы
        if (Convert::ToInt16(temp) >= 48 && Convert::ToInt16(temp) <= 57) { countNumbers++; }         // цифры из юникода
    }
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
19.12.2022, 18:04
Цитата Сообщение от irenochka20 Посмотреть сообщение
после некоторых изменений код заработал!
Сколько он заработал ?
Вы точно проверяли ? И букв "Ёё" считает ?
0
0 / 0 / 0
Регистрация: 22.02.2021
Сообщений: 4
19.12.2022, 18:11  [ТС]
теперь вроде точно все готово.. Спасибо, что заметили

C++
1
2
3
4
5
6
for (int i = 0; i < strokaTest->Length; i++) {
        wchar_t temp = strokaTest[i];
        if ((temp >= L'а' && temp <= L'я') || (temp == L'ё')) { countRussianLetters++; } // прописные русские буквы
        else if ((temp >= L'А' && temp <= L'Я') || (temp == L'Ё')) { countRussianLetters++; } // строчные русские буквы
        else if (Convert::ToInt16(temp) >= 48 && Convert::ToInt16(temp) <= 57) { countNumbers++; }         // цифры из юникода
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2022, 18:11
Помогаю со студенческими работами здесь

Подсчет русских букв в строке
Всем привет :) Есть такая задача: Ввести с клавиатуры строку. Определить, сколько в этой строке гласных, согласных, строчных и прописных...

Подсчет количества русских согласных букв с строке
помогите, пожалуйста!!!! Нужно подсчитать количество русских согласных букв в строке, введенной с клавиатуры!!! что тут не...

Подсчет количества русских согласных букв с строке
Народ, помогите, пожалуйста!!!! Нужно подсчитать количество русских согласных букв в строке, введенной с клавиатуры!!!

Подсчет количества русских согласных букв с строке
Народ, помогите, пожалуйста!!!! Нужно подсчитать количество русских согласных букв в строке, введенной с клавиатуры!!! что тут не...

Подсчёт в строке слов, состоящих только из русских букв
задание Подсчёт в строке слов, состоящих только из русских букв #include &lt;stdio.h&gt; int f(char*); void main() { char s; ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru