C++: Число слов в строке

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

Слова разделяются пробелами, значит, достаточно посчитать их количество, но пробелов всегда на 1 меньше, чем слов (исключая случай когда пробел стоит на конце строки), поэтому хорошо бы прибавить к числу пробелов единичку.

Реализация:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
 
#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <string.h>
 
int main()
{
    char myString[40];
    puts("Vvedyte stroku: ");
    gets(myString);
    int space=0;
    for (int i =1; i<=strlen(myString); i++)
    {
        if (myString[i] == ' ')
        {
            space = space+1;
        }
    }
    printf("chislo slov ravno %d\n", space+1);
}
#include "stdafx.h"

#include <stdio.h>
#include <locale.h>
#include <math.h>
#include <string.h>

int main()
{
    char myString[40];
    puts("Vvedyte stroku: ");
    gets(myString);
    int space=0;
    for (int i =1; i<=strlen(myString); i++)
    {
        if (myString[i] == ' ')
        {
            space = space+1;
        }
    }
    printf("chislo slov ravno %d\n", space+1);
}

В коде мы бежим по символам строки и смотрим не пробел ли это — если так, то увеличиваем количество на 1. Можно реализовать функцию для проверки такого:

1
2
3
4
5
6
7
8
9
10
11
12
int WordCount(char S [])
{
    int space=0;
    for (int i = 1; i<= strlen(S); i++)
    {
        if (S[i] == ' ')
        {
            space++;
        }
    }
    return space+1;
}
int WordCount(char S [])
{
    int space=0;
    for (int i = 1; i<= strlen(S); i++)
    {
        if (S[i] == ' ')
        {
            space++;
        }
    }
    return space+1;
}

Принимает строку, возвращает количество слов.

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

    • А можете что-нибудь предложить конкретное по оптимизации? Пара вариантов у меня есть, но здесь они не являются необходимостью, так как программа маленькая и учебная.

  1. Привет!
    Потроллю, быдлокод :)
    1. int main() — воздержусь комментировать такое объявление main’а.
    2. char myString[40]; — а почему строка юзера не может быть больше 40 символов? Бред…
    3. puts(«Vvedyte stroku: «) — ну локализацию бы чтоли выбрал :)
    4. Если ты заявляешь, что код плюсовый, так и объявляй счётчик цикла по плюсовому: не int i; for (i=…, а for (int i =…

    • О! Привет =)

      1. Чем тебе он не понравился? тебе давай аргументы строки командной? Нафига?
      2. Это так, просто потому, что мои одногруппники (да и читатели) могут не знать динамической памяти. Как выделять и пользовать.
      3. Можно и локализировать — в некоторых программах тут я это делал:
      #include
      setlocale(LC_ALL, Russian»»); примерно так.
      4. Внутри функции это именно так. В коде я править не стал. Допустимо и то и то, однако, ты прав — лучше переменную оборачивать внутрь.

    • Введу Вас в курс дела:был зачет,с ограничением по времени
      Отсюда:
      «puts(«Vvedyte stroku: «) – ну локализацию бы чтоли выбрал :)«-возможно человек торопился и ему не setlocale’ов и прочей мелочи
      «char myString[40];» — возможно просто специфичное условие задачи
      «Если ты заявляешь, что код плюсовый, так и объявляй счётчик цикла по плюсовому: не int i; for (i=…, а for (int i =…«-наверное тема больше для холиваров:D не уверен,что нативно он в плюсах появился раньше,чем в 99ом Си.