1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 50
1

Вывести на экран слова с нечетным количеством букв (не работает с кириллицей)

25.03.2018, 13:13. Показов 3772. Ответов 6

Здравствуйте.
Написал программу, которая должна выводить на экран слова из текста с нечетным количеством букв. Для английского алфавита все отлично работает, а с русскими буквами не хочет. Уже 2 день сижу.
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
#include <iostream>
#include <windows.h>
using namespace std;
int isRusAlpha(char a) {
    if (a == 'а')
        return 1;
}
void main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char text[5][80];
    int k; //Количество строк в тексте
    cout << "Сколько строк будет в вашем тексте?\n";
    cin >> k;
    //Ввод текста (массива строк)
    cout << "Приступайте к вводу текста\n";
    cin.get();
    for (int i = 1;i <= k;i = i + 1)
        cin.getline(text[i], 80);
    cout << "Слова с нечетным количеством символов из введенного текста\n";
    int p = 0;
    for (int i = 1;i <= k;i = i + 1){
        int dl = strlen(text[i]);
        for (int j = 0;j < dl;j++) {
            while ((isalpha(text[i][j]))&&(j<dl)) {
                p = p + 1;
                j = j + 1;
            }
            if (p % 2 != 0) {
                for (int z = j - p;z < j;z++)
                    cout << text[i][z];
                cout << '\n';
            }
            p = 0;
        }
    }
    system("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2018, 13:13
Ответы с готовыми решениями:

Вывести слова с нечетным количеством букв
Пользователь вводит массив символов. Нужно вывести слова с нечетным количеством букв.

Вывести слова с нечетным количеством согласных букв
Здравствуйте уважаемые форумчане. Очень нужна помощь с решением данной задачи. Вывести слова с...

Множества: вывести слова с нечетным количеством согласных букв
Дана строка, слова разделены любыми знаками препинания, Вывести слова с нечетным количествам...

В тексте удалить слова с нечетным количеством букв
2) Вводится текст. В тексте удалить слова с нечетным количеством букв. Конец ввода F1.

6
18 / 18 / 15
Регистрация: 19.03.2018
Сообщений: 49
26.03.2018, 01:32 2
Попробуйте заменить isalpha на IsCharAlpha.
1
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 50
28.03.2018, 16:59  [ТС] 3
Проблема решилась написанием своей функции для проверки символа на то, является ли он буквой русского алфавита. Функция isalpha не используется.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.03.2018, 17:05 4
Цитата Сообщение от Костик24 Посмотреть сообщение
а с русскими буквами не хочет.
Нужно добавить (в main):
C++
1
setlocale( LC_ALL,"Russian" );
И параметры функций cctype (isalpha()) приводить к unsigned char.
0
1 / 1 / 1
Регистрация: 20.03.2013
Сообщений: 50
28.03.2018, 17:07  [ТС] 5
Цитата Сообщение от nd2 Посмотреть сообщение
Нужно добавить:
C++Выделить код
1
setlocale( LC_ALL,"Russian" );
И параметры функций cctype (isalpha()) приводить к unsigned char.
setlocale() русифицирует только вывод, а там проблема с вводом.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.03.2018, 18:08 6
Цитата Сообщение от Костик24 Посмотреть сообщение
а там проблема с вводом.
Для ввода там есть это:
Цитата Сообщение от Костик24 Посмотреть сообщение
C++
1
2
SetConsoleCP(1251); 
SetConsoleOutputCP(1251);
Надеюсь, шрифт Lucida Console, в свойствах консоли, выбран?
setlocale() нужно добавить, чтобы isalpha() правильно работала с кириллицей.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
28.03.2018, 18:16 7
Вот твой код с исправлениями. На скрине работа. Что не устраивает?
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
#include <iostream>
#include <windows.h>
using namespace std;
int isRusAlpha(char a) {
    if (a == 'а')
        return 1;
}
void main() {
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    char text[5][80];
    int k; //Количество строк в тексте
    cout << "Сколько строк будет в вашем тексте?\n";
    cin >> k;
    //Ввод текста (массива строк)
    cout << "Приступайте к вводу текста\n";
    cin.get();
    for (int i = 1;i <= k;i = i + 1)
        cin.getline(text[i], 80);
    cout << "Слова с нечетным количеством символов из введенного текста\n";
    int p = 0;
    for (int i = 1;i <= k;i = i + 1){
        int dl = strlen(text[i]);
        for (int j = 0;j < dl;j++) {
            while ((isalpha((unsigned char)text[i][j]))&&(j<dl)) {
                p = p + 1;
                j = j + 1;
            }
            if (p % 2 != 0) {
                for (int z = j - p;z < j;z++)
                    cout << text[i][z];
                cout << '\n';
            }
            p = 0;
        }
    }
    system("pause");
}
Миниатюры
Вывести на экран слова с нечетным количеством букв (не работает с кириллицей)  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2018, 18:16
Помогаю со студенческими работами здесь

Удалить из строки все слова с нечётным количеством букв
Строка вводится с клавиатуры. В ней может быть произвольное количество символов и произвольное...

Ввести строку, и все слова с нечетным количеством букв в ней заменить пропусками
код вроде правильный, но не работает #define _CRT_SECURE_NO_WARNINGS #include &lt;stdio.h&gt;...

Создать 2 файла, один из которых содержит слова с четным количеством букв, другой — с нечетным
Дан текстовый файл в котором записаны слова. Создать 2 текстовых файла один из которых содержит...

Дополнить программу так, чтобы отдельно дополнительно печатались: слова с нечетным количеством букв
Дополнить программу так, чтобы отдельно дополнительно печатались: слова с нечетным количеством букв...

Удалить из текста все слова с нечетным количеством символов и перевернуть слова с четным количеством символов
удалить из текста все слова с нечетным количеством символов и перевернуть все слова с четным...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru