Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
#1

Работа с строками: подсчитать количество слов, количество букв - C++

28.09.2014, 18:25. Просмотров 2647. Ответов 6
Метки нет (Все метки)

Есть текст. Нужно:
1. Посчитать количество слов в тексте.
2. Посчитать количество букв "а" в последнем слове.
3. Найти количество слов, корыте начинаются с "в".
4. Найти количество слов и вывести их, у которых одинаковы первые и последние буквы.
5. Найти длину наименьшего слова.

Идеи:
1. Слова в нас разделяются пробелом, но нужно исключить знаки препинания.
2. Чтобы посчитать количество букв в слове нужно, получить это слово. Можно поиском с конца 1-го пробела.
3. В принципе вместе с подсчётом слов можно анализировать с какой буквы начинаются.
4. хз
5. При подсчете слов, считать количество символов.

Как реализовать?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2014, 18:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с строками: подсчитать количество слов, количество букв (C++):

Определить количество слов, начинающихся с гласных букв (работа со строками) - C++
Дана строка символов. Определить количество слов, начинающихся с гласных букв. Вывести на экран эти слова. Завтра для зачета нужна....

Вводится предложение. Подсчитать количество слов и подсчитать количество букв в самом длинном слове - C++
Неправильно считает количество букв в наибольшем слове. #include <iostream> #include <cstdio> #include <cstring> using...

Дан текст, в котором слова разделены одним пробелом. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в последнем слове - C++
Дан текст, в котором слова разделены одним пробелом. а) Подсчитать количество слов в данной строке. б) Подсчитать количество букв а в...

Работа с текстом. Подсчитать количество слов, имеющих удвоенные сочетания букв. - C++
Подсчитать, сколько слов в тексте имеют удвоенные сочетания букв.(код без массивов) Иван Аганин, ПравилаИзначальное название темы:...

Работа с файлами (подсчитать количество слов в файле, содержащих нечетное количеством букв) - C++
Первый раз работаю с файлами и тут у меня проблемы. После компиляции выводит неправильный ответ и выбивает: 'Lab 8.exe': Loaded...

Введите с клавиатуры некоторый текст и подсчитать в нем количество слов, букв, цифр,строчных букв, заглавных б - C++
Напишите пожалуйста программу в С++: Введите с клавиатуры некоторый текст и подсчитать в нем количество слов, букв, цифр,строчных букв,...

6
Гоблин-инженер
113 / 110 / 32
Регистрация: 18.09.2014
Сообщений: 337
28.09.2014, 20:22 #2
EfimKR, каковы ваши идеи? (в виде кода)
0
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
28.09.2014, 21:05  [ТС] #3
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
#include<iostream>
#include<windows.h>
#include<cstdio>
#include<cctype>
using namespace std;
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
    
    //char text[] = "Есть текст. Нужно:1. Посчитать количество слов в тексте.2. Посчитать количество букв а в последнем слове.3. Найти количество слов, корыте начинаются с в.4. Найти количество слов и вывести их, у которых одинаковы первые и последние буквы.5. Найти длину наименьшего слова.";
    char text[] = "sfgsef";
    int nWord=0, nLett=0, nWord_v=0, nWord_a_a=0, nMinLenght;
 
    int n = strlen(text)+1;
 
    int i = 0;
    while (i<n)
    {
        if ((int)isalpha(text[i]))
            nWord++;
        while( (int)isalpha(text[i]) )
            i++;
        while( !(int)isalpha(text[i]) )
            i++;
    }
 
    cout<<text<<n<<" "<<nWord;
    return 0;
}
Вот реализация 1 пункта, при запуске выдает это:
http://www.cyberforum.ru/attachment....1&d=1411922159

Добавлено через 28 минут
Вроде ошибка из-за передачи isalpha() кириллицы. Как их подружить?
0
BrainBot
1 / 1 / 1
Регистрация: 15.09.2013
Сообщений: 17
28.09.2014, 21:09 #4
Пользуетесь функцией strlen, а библиотеку string.h не подключили
0
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
28.09.2014, 21:19  [ТС] #5
C++
1
2
3
4
5
6
7
8
    while (i<n && text[i] != '\0') // Узнаем количество слов в тексте.
    {
        if (text[i] != ' ') nWord++;
        while (text[i] != ' ' && text[i] != '\0')
            i++;
        while (text[i] == ' ')
            i++;
    }
Это решение 1 задания. Корявувато правда, если подружить isalpha() и кириллицу можно лучше сделать.
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
28.09.2014, 23:16 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Так а кто мешает посмотреть таблицу кодов кодировки?
C++
1
2
3
4
bool is_alpha(const unsigned char c)
{
    return c >= 192 && c <= 255 || isalpha(c);
}
или в явную, тогда cctype не надо подключать
C++
1
2
3
4
bool is_alpha(const unsigned char c)
{
    return c >= 192 && c <= 255 || c >= 65 && c <= 90 || c >= 97 && c <= 122;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cctype>
#include <cstdio>
#include <windows.h>
 
bool is_alpha(const unsigned char c)
{
    return c >= 192 && c <= 255 || isalpha(c);
}
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
 
    std::string s("Hello, Мир!");
    for (std::size_t i = 0, cnt = s.size(); i < cnt; ++i)
        std::cout << "'" << s[i] << "'" << " => " << std::boolalpha << is_alpha(s[i]) << std::endl;
    std::cin.get();
}
Работа с строками: подсчитать количество слов, количество букв
0
EfimKR
53 / 26 / 10
Регистрация: 24.06.2014
Сообщений: 229
Записей в блоге: 1
29.09.2014, 23:40  [ТС] #7
KOPOJI, большое спасибо.

Добавлено через 22 часа 38 минут
Мое решение:

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
// Задания довольно специфические, потому код по виду напоминает наши дороги. 
// Зато грамотно  организован вывод.
// В подопытном тексте могут быть  допущены опечатки для более наглядной демонстрации работы программы.
// Для корректной работы выставить в консоли шрифт "Lucida console"
 
#include<iostream>
#include<windows.h>
#include<cstdio>
#include<cctype>
#include<string>
using namespace std;
 
inline bool is_alpha(const unsigned char c) // проверка символа на букву
{
    return c >= 192 && c <= 255 || isalpha(c); // Сначала проверяем на принадлежность к кириллице, потом используем функцию для проверки латинницы.
}
 
 
int main()
{
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
        
    char text[] = "Есть текст. Нужно: Посчитать количество слов в тексте. Посчитать количество букв а в последнем словес. Найти количествок слов, корыте начинаются с в. Найти количество слов и вывести их, у которых одинаковы первые и последние буквы. Найти длину наименьшего словАаа .000 // 00 22 ";
    int nWord=0, nLett_A=0, nWord_v=0, nWord_a_a=0, nMinLenght; //
 
    cout<<"Текс для задания : \n"<<text;
    
    int n = strlen(text)+1;
    char *szCopy = new char[n];     // используется, если нужно изменение текста
    szCopy = text;
    
    int i = 0;
    while (i<n && text[i] != '\0') // Узнаем количество слов в тексте.
    {
    
        if (is_alpha(text[i])) nWord++;                     // Если 1 символ буква, количество слов +1. Дальше циклом ищем конец слова - 
        while (is_alpha(text[i]) && text[i] != '\0')        // небукву, после буквы.
            i++;
        while (!is_alpha(text[i]))                          // Пропускаем все небуквы, если дошли до конца строки - прерываем цикл.
        {
            if (text[i] == '\0')
                break;
            i++;
        }
    }
    cout<<"\nВ тексте "<<nWord<<" слов.\n";
 
    char szEndWord[30] = {0};               // запишем сюда последнее слово
    bool end_word = false;
    int k=n;
    while (!end_word)
    {
        char *temp = strrchr(szCopy, ' '); // Получение последнего слова. Ищем последний пробел, если следующий символ буква, значит она в 
        int l_t=strlen(temp);
        if (is_alpha(temp[1]))          // начале последнего слова.
        {
            for ( int j = 0; is_alpha(temp[j+1]) ; j++ ) // копирование в последнее слово только букв
            {
                *(szEndWord+j) = *(temp+j+1);                                    
            }
            int l = strlen(szEndWord);
            szEndWord[l] = '\0';
 
            end_word = true;
        }
        else 
        {
            k-=l_t;             // откидывание небукв в конце текста
            szCopy[k]= '\0';
        }
    }
    i = 0;
    while(szEndWord[i] != '\0')
    {
        if ( szEndWord[i] == 'а'|| szEndWord[i] == 'А')
        {
            nLett_A++;
            i++;
        }
        else
            i++;
    }
    cout<<"Количество букв \"а\", в последнем слове \""<<szEndWord<<"\" :"<<nLett_A<<".\n";
 
    i = 0;
    while (i<n && text[i] != '\0') // Узнаем количество слов, которые начинаются с в.
    {
    
        if (is_alpha(text[i]))
            if (text[i] == 'в' || text[i] == 'В')
                if ( is_alpha(text[i+1]) )              // это условие пропустит только многобуквенные слова
                nWord_v++;
        while (is_alpha(text[i]) && text[i] != '\0')
            i++;
        while (!is_alpha(text[i]))
        {
            if (text[i] == '\0')
                break;
            i++;
        }
    }
    cout<<"В тексте "<<nWord_v<<" слов, которые начинаются с \"в\".(Однобуквенные слова не рассматриваем)\n";
    
//-------------------------------------------- Поиск слов с однаковыми первой и последней буквой и их вывод.
    i = 0;
    k = 0;
    cout<<"Слова с однаковыми первой и последней буквой (Однобуквенные слова \nне рассматриваем) : \n";
    while (i<n && text[i] != '\0')
    {
        char symb;
        if ( is_alpha(text[i]))
        {
            symb = text[i]; k = i;              // Если встретилась буква, запомним ее и номер ее.
            while(is_alpha(text[i]))
                i++;
            if (symb == text[i-1] && k != i-1)  // Испытание пройдут только многобуквенные слова с однаковыми первой и последней буквой.
            {
                nWord_a_a++;
                for (int s = k; s < i; s++)
                    cout<<text[s];
                cout<<"\n";
            }
        }
        while(!is_alpha(text[i]))
        {
        if (text[i] == '\0')
                break;
            i++;
        }
    }
    cout<<"Всего : "<<nWord_a_a<<"\n";
 
    cout<<"Длина наименьшего слова(Однобуквенные слова не рассматриваем) : ";
    i = 0;
    nMinLenght = n;                 // Пусть минимум будет максимально возможный.
    while(i<n && text[i] != '\0')
    {
        if (is_alpha(text[i]))
        {
            int q = 0;
            while(is_alpha(text[i]))
            {
                i++; q++;
            }
            if (nMinLenght > q && q != 1) // Да найдем мы наименьшее многобуквенное.
                nMinLenght = q;
        }
        while(!is_alpha(text[i]))
        {
            if (text[i] == '\0')
                break;
            i++;
        }
    }
 
    cout<<nMinLenght<<"\n";
 
    return 0;
}
 
// На этом всё. Да прибудет с Вами Сила.
0
29.09.2014, 23:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.09.2014, 23:40
Привет! Вот еще темы с ответами:

Работа со строками (подсчитать количество предложений) - C++
в введенном с клавиатуры тексте подсчитать количество предложений(конец предложения обозначается . ! ?) в которые входит заданное с...

Подсчитать количество слов, букв в тексте - C++
1. исходные данные: задан формат файла .txt с англ. текстом задание. а) подсчитать кол-во слов в тексте б) подсчитать кол-во каждой...

Подсчитать количество слов, в тексте от пробела до пробела, и количество букв - C++
нужно создать програму считает количество слов, в тексте от пробела до пробела(если два пробела сразу конец текста), а также ...

Подсчитать количество букв, слов и цифр в строке - C++
Во введенной строке символов подсчитать количество букв (отдельно русского и английского алфавитов), цифр, слов, предложений. (Считать, что...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru