8 / 6 / 3
Регистрация: 14.04.2019
Сообщений: 71
1

Подсчитать количество слов, которые имеют нечетную длину

27.11.2019, 09:45. Показов 1060. Ответов 1

Доброго времени суток! На просторах киберфорума нашел данный код, который записан ниже. Суть его в том, что он работает только с английским языком. Как его переделать под русскую/украинскую раскладку?
Само задание:
С клавиатуры вводится текстовая строка. Составить программу, которая подсчитывает количество слов, которые имеют нечетную длину; выводит на экран частоту вхождения каждой буквы; удаляет текст размещен в круглых скобках.
 Комментарий модератора 
П.5.16.Правил
Запрещено создавать темы с множеством вопросов во всех разделах, кроме разделов платных услуг. Один вопрос - одна тема.

Вот который код у меня есть:
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
 
 
using namespace std;
 
unsigned count_words_odd(const char* s);
void  print_repchar(FILE* _out, const char* s);
char* str_rem(char* s, char fc, char lc);
 
int main(void) {
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
 
    char s[] = "ghb tes (тес) геп нрт";
 
    printf("Слова, що мають непарну кількість літер: %u\n", count_words_odd(s));
    print_repchar(stdout, s);
    puts(s);
    puts(str_rem(s, '(', ')'));
    return 0;
}
 
//кол-во слов, которые имеют нечетную длину
unsigned count_words_odd(const char* s) {
    unsigned i = 0, n = 0;
    do {
        if (iswalnum(*s))
            ++i;
        else if (i > 0) {
            if (i & 1)
                ++n;
            i = 0;
        }
    } while (*s++ != '\0');
    return n;
}
 
//выводит на экран частоту вхождения каждой буквы
void print_repchar(FILE* _out, const char* s) {
    int i;
    unsigned int abc[26];
 
    memset(abc, 0, sizeof(abc));
    while (*s) {
        i = toupper(*s);
        if (i >= 'A' && i <= 'Z')
            ++abc[i - 'A'];
        ++s;
    }
 
    for (i = 0; i < 26; ++i) {
        if (abc[i] > 0)
            fprintf(_out, "%C(%u)\n", (char)(i + 'A'), abc[i]);
    }
    putc('\n', _out);
}
 
//удаляет текст размещен в круглых скобках
char* str_rem(char* s, char fc, char lc) {
    char* i, * p, * t = s;
    while (*s && (*s != fc))
        ++s;
 
    for (p = s; *s; *s = *p) {
        if (*p == fc) {
            i = p + 1;
            while (*i && (*i != lc))
                ++i;
 
            if (*i == lc) {
                ++s;
                p = i;
                continue;
            }
        }
        ++s;
        ++p;
    }
    return t;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2019, 09:45
Ответы с готовыми решениями:

Подсчитать количество слов строки, которые имеют нечетную длину
С клавиатуры вводится текстовая строка. Написать программу, которая: - подсчитывает количество...

Подсчитать количество пар соседних элементов, которые имеют противоположные знаки
Объявить массив целых чисел и заполнить его значениями, введенных с клавиатуры. Диапазон значений...

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

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

1
El. Psy. Congroo.
110 / 92 / 32
Регистрация: 09.01.2018
Сообщений: 344
27.11.2019, 10:41 2
C++
1
#include <locale.h>
C++
1
setlocale(LC_CTYPE,"Russian");
Добавлено через 46 минут
не забудьте про символьное ASCII-смещение, а также про размер массива abc. вряд ли вы меня поняли, поэтому вот:
C++
1
unsigned int abc[33];
C++
1
if (i >= 0xc0 && i <= 0xdf) ++abc[i - 0xc0];
C++
1
for (i = 0; i < 33; ++i) {
C++
1
fprintf(_out, "%c(%u)\n", (char)(i + 0xc0), abc[i]);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2019, 10:41
Помогаю со студенческими работами здесь

Указать количество слов, которые имеют хотя бы одну из звонких согласных
Дана строка, содержащая текст. Указать количество слов, которые содержат хотя бы одну букву из...

Массивы. Подсчитать количество пар соседних элементов, которые имеют противоположные знаки
Подсчитать количество пар соседних элементов, которые имеют противоположные знаки. размерность...

Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр
Помогите пожалуйста разработать программу на языке программирования С++. Дан массив из N целых...

Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр
Дан массив из N целых чисел, где N&lt;=16, каждое число в диапазоне от –32000 до 32000. Удалить из...


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

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

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