С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 16.04.2020
Сообщений: 3
1

подсчет слов

24.04.2020, 10:06. Показов 3184. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подсчитать количество слов во введенном предложении.
a) между словами находится только 1 пробел
b) пробелы также могут располагаться вначале и в конце предложения.
c) пробелы могут располагаться вначале и в конце предложения, и между словами может быть более 1 пробела.
Помогите, пожалуйстааа, особенно первые два пунктаа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2020, 10:06
Ответы с готовыми решениями:

Подсчёт слов в строке. Подсчёт символов в словах строки
Начал изучение строк в С++. Решая задачу по поиску количества строк и количеству указанных символов...

Ввод слов в массив и подсчёт введённых слов
как можно решить эту задачу:Напишите программу,использующую массив char и цикл для чтения по одному...

Подсчет слов
Посмотрите плиз, что не так с кодом. Бред скорее всего. Прога и работает, и нет одновременно....

Подсчет слов в файле.
Помогите решить задачку... Прочитать файл и подсчитать число слов в файле.Слово считается от...

4
Just Do It!
4027 / 2421 / 640
Регистрация: 23.09.2014
Сообщений: 7,795
Записей в блоге: 2
24.04.2020, 11:17 2
Alinoc,
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
///----------------------------------------------------------------------------|
/// Подсчёт слов в строке.
/// С++11
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main()
{   setlocale(0, "");
 
    string s = "   раз   два три   четыре    ";
    s.erase(    unique
                (   s.begin(), s.end(), 
                    [](char c,char s)
                    {   return c == ' ' && s == ' ';
                    }
                ), s.end()
            );
    
    cout << s << ".\n";
 
    int cnt = 0;
    if(!s.empty())
    {   if(s[0]     == ' ') cnt++;
        if(s.back() == ' ') cnt++;
 
        cnt = count_if  (   s.begin(), s.end(), 
                            [](char c)
                            {   return c == ' ';
                            }
                        ) + 1 - cnt;
    }
 
    std::cout << "Количество слов: " << cnt << "\n";
}
Добавлено через 6 минут
Цитата Сообщение от XLAT Посмотреть сообщение
C++
27
28
if(s[0] == ' ') cnt++;
if(s.back() == ' ') cnt++;
эта альтернатива возможно красивее:
C++
27
cnt += (*s.begin() == ' ') + ( s.back () == ' ');
ps: но будут ифы быстрее.
1
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
24.04.2020, 11:20 3
a)
C++
1
2
3
4
5
6
7
8
9
10
int words(const char *str)
{
    int ret = 1;
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (str[i] == ' ')
            ret++;
    }
    return ret;
}
b)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int words(const char *str)
{
    int ret = 1;
    int i = 0;
    for (; str[i] != '\0'; i++)
    {
        if (str[i] == ' ')
            ret++;
    }
    if (str[0] == ' ')
        ret--;
    if (str[i - 2] == ' ')
        ret--;
    return ret;
}
1
Just Do It!
4027 / 2421 / 640
Регистрация: 23.09.2014
Сообщений: 7,795
Записей в блоге: 2
24.04.2020, 11:42 4
ещё вариант без ирейза,
т.е. "не портя" строку:
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
///----------------------------------------------------------------------------|
/// Подсчёт слов в строке.
/// С++11
///----------------------------------------------------------------------------:
#include <iostream>
#include <string>
#include <algorithm>
 
using namespace std;
 
int main()
{   setlocale(0, "");
 
    string s = "   раз   два три   четыре";
    cout << s << ".\n";
 
    int cnt = 0;
    if(!s.empty())
    {   bool b = false;
        cnt = count_if  (   s.begin(), s.end(), 
                            [&b](char c)
                            {   if( c == ' ')
                                {   if   (b)  return false;
                                    else  b = true;
                                }
                                else      b = false;
                                return    b;
                            }
                        ) + 1 - (*s.begin() == ' ') - ( s.back () == ' ');
    }
 
    std::cout << "Количество слов: " << cnt << "\n";
1
Любитель чаепитий
3744 / 1800 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
24.04.2020, 11:44 5
Цитата Сообщение от XLAT Посмотреть сообщение
count_if
так можно просто std::count использовать, у вас не комплексное условие.
ну а вообще, пробелы - не единственные разделители. лучше использовать std::isspace.
C++
1
auto cnt = std::count_if(s.begin(), s.end(), [] (char c) { return std::isspace(c); });
Цитата Сообщение от XLAT Посмотреть сообщение
C++
1
*s.begin()
s.front();
my version
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
#include <iostream>
#include <string>
#include <algorithm>
 
void trimString(std::string & s)
{
    //left trim
    auto beg = std::find_if(s.begin(), s.end(), [] (char c) { return !std::isspace(c); });
    if (beg == s.end())
        return; //one word without spaces
    s.erase(s.begin(), beg);
    
    //right trim
    auto end = std::find_if(s.rbegin(), s.rend(), [] (char c) { return !std::isspace(c); });
    if (end == s.rend())
        return; //left trim removed all spaces
    s.erase(end.base(), s.end());
}
 
void uniqueSpaces(std::string & s)
{
    auto it = std::unique(s.begin(), s.end(), [] (char l, char r) { return ::isspace(l) && ::isspace(r);  });
    s.erase(it, s.end());
}
 
int countWords(std::string s)
{
    trimString(s);
    uniqueSpaces(s);
    if (s.empty())
        return 0;
    return (int)std::count_if(s.begin(), s.end(), [] (char c) { return std::isspace(c); }) + 1;
}
 
void testString(int expected, std::string s)
{
    auto cnt = countWords(s);
    if (expected == cnt)
    {
        std::cout << "[PASSED] string: '" << s << "' expected: " << expected << std::endl;
    }
    else
    {
        std::cout << "[FAILED] string: '" << s << "' expected: " << expected
                  << ", actual: " << cnt << std::endl;
    }
}
 
int main()
{
    testString(0, "");
    testString(1, "asd");
    testString(2, "some sentence"); //a
    testString(7, " some sentence with spaces on the sides "); //b
    testString(6, " a    lot    of   spaces    between    words "); //c
    testString(7, "   three     in     the     begin,    middle    and    end   ");
}
2
24.04.2020, 11:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2020, 11:44
Помогаю со студенческими работами здесь

Подсчет количества слов
Допустим, дана строка: &quot;129 s23 ertr 234 0 e&quot; Как подсчитать количество слов, состоящих только...

Подсчет количества слов
Есть два файла, 1.txt и 2.txt Задание: 1) Скопировать в файл 2.txt только те строки из...

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

Подсчет слов в предложениях
Здравствуйте! При написании исходника столкнулся с проблемой подсчета слов. Где может быть ошибка?...

Подсчет слов с файле
Как подружить эти 2 кода? (в с++ разбираюсь не очень хорошо) #include &quot;pch.h&quot; #include &lt;iostream&gt;...

Подсчет кол-ва слов
В созданном массиве строк, подсчитать в тексте количество слов, в которых нету цифр. Есть код, и...


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

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