Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/50: Рейтинг темы: голосов - 50, средняя оценка - 4.94
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 1
1

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

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

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

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

Как реализовать?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2014, 18:25
Ответы с готовыми решениями:

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

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

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

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

6
117 / 114 / 65
Регистрация: 18.09.2014
Сообщений: 337
28.09.2014, 20:22 2
EfimKR, каковы ваши идеи? (в виде кода)
0
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 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 пункта, при запуске выдает это:
https://www.cyberforum.ru/atta... 1411922159

Добавлено через 28 минут
Вроде ошибка из-за передачи isalpha() кириллицы. Как их подружить?
0
1 / 1 / 1
Регистрация: 15.09.2013
Сообщений: 17
28.09.2014, 21:09 4
Пользуетесь функцией strlen, а библиотеку string.h не подключили
0
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 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
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
28.09.2014, 23:16 6
Лучший ответ Сообщение было отмечено EfimKR как решение

Решение

Так а кто мешает посмотреть таблицу кодов кодировки?
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
57 / 30 / 13
Регистрация: 24.06.2014
Сообщений: 255
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2014, 23:40
Помогаю со студенческими работами здесь

Работа с файлами (подсчитать количество слов в файле, содержащих нечетное количеством букв)
Первый раз работаю с файлами и тут у меня проблемы. После компиляции выводит неправильный ответ и...

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru