Посчитать количество слов в строке

Задачи и их решения / Посчитать количество слов в строке

 

Задача Посчитать количество слов в строке. Слова могут разделяться одним или несколькими пробелами.

Для ввода строки нельзя использовать функцию cin в данном случае, поскольку эта функция осуществляет ввод строки до пробела или перевода строки. Поэтому воспользуемся методом get функции cin:
 
cin.get(УказательНаСтроку, МаксимальноеЧислоСимволов);
 
Условием окончания строки является символ с кодом равным 0 (нуль-символ, ‘\0’). После ввода строки организуем цикл по элементам строки до ее окончания. Перед циклом убираем пробелы, введенные в начале строки (до первого слова). Условием определения следующего слова в строке является наличие какого-то символа после пробела. Именно это условие увеличивает счетчик count на 1.

Реализация на 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
#include <iostream>
using namespace std;
int main()
{
  char s[80];
  int slovo, count = 0;
  system("chcp 1251");
  system("cls");
  cout << "Введите строку: " << endl;
  cin.get(s, 80);
  int i = 0;
  while (s[i] == ' ' && s[i] != '\0')
    i++;
  slovo = 0;
  while (s[i] != '\0') {
    if (s[i] != ' ' && slovo == 0)
    {
      slovo = 1;
      count++;
    }
    else if (s[i] == ' ')
      slovo = 0;
    i++;
  }
  cout << "Количество слов в строке " << count;
  cin.get(); cin.get();
  return 0;
}

 
Результат выполнения
Количество слов в строке


Назад: Задачи и их решения

Комментариев к записи: 15

  • Здравствуйте! Подскажите, пожалуйста: а зачем в циклах while переменной slovo присваиваются значения 0 и 1? И что это означает?

  • Дмитрий
    Здраствуйте, помогите пожалуйста.Как написать алгоритм чтобы из введённого предложения он считал количество символов первого слова и последнего?

    • Елена Вставская
      Слова в строке разделяются пробелами. Последовательность символов до первого пробела - это первое слово. Последовательность символов с конца до первого (с конца) пробела - последнее слово.

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #include <bits/stdc++.h>

    using namespace std;

    int main()
    {
        unsigned t = time(0);
        system("chcp 1251");
        string s;
        getline(cin , s);
        int pos = s.find(' ');
        unsigned iter = 0;
        while(pos + 1)
        {
            ++iter;
            s.erase(0 , pos + 1);
            pos = s.find(' ');
        }
        cout << iter + 1 << endl;
        cout << time(0) - t << " секунды";
        return 0;
    }
    вот это правильный код , а код который у вас на сайте называется говнокодом

    • Елена Вставская
      А можно еще поинтересоваться, какой "правильный компилятор" полагается к "правильному коду"? Потому что Visual Studio "правильный код" компилировать не желает.

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    string[] words = Console.ReadLine().Split();

                int count = 0;

                foreach(string w in words)
                {
                    count++;
                }
                Console.WriteLine($"количество слов в строке = {count} ");

  • Владислав
    А как сделать так, чтобы программа подсчитывала количество разных слов в строке. Если например, мы вводим строку: МАМА МАМА МАМА, то нужно чтоб это считало как 1 слово, а не 3. Помогите, пожалуйста.


    • Елена Вставская
      Сравниваем (символ ==) каждый символ строки (с номером i) с пробелом.


    • Елена Вставская
      При вводе строки пользователь нажимает "ENTER". Назначение в конце программы вызова функции cin.get() - задержать закрытие консоли. Но первая функция cin.get() считывает "ENTER", нажатый пользователем после ввода строки, за собственный ввод. В результате если cin.get() будет использован однократно, консоль закроется. Иными словами: если программа предусматривает ввод с клавиатуры (в любом количестве), в конце для удержания консоли необходимо использование двукратного вызова функции cin.get(). Если программа содержит только вывод, в конце достаточно одного вызова cin.get().

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
    using namespace std;
    int main() {
      char s[80], word[80];
      stringstream sstr;
      int nWord = 0;
      cin.get(s, 80);
      sstr <> word;
      ++nWord;
      cout << nWord;
    }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *