Grade 10 · Character stringsCitește în română

Counting the words

Original: Numărarea cuvintelor

O(n)C++1735 lines2 examples

The idea

Without strtok: a word starts where a non-space character follows a space (or sits at the very beginning of the string). We count these 'beginnings', so multiple spaces between words or at the ends do not confuse the count.

Original description (Romanian)

Fără strtok: un cuvânt începe acolo unde un caracter diferit de spațiu urmează după un spațiu (sau se află chiar la începutul șirului). Numărăm aceste „începuturi”, așa că spațiile multiple dintre cuvinte sau de la capete nu încurcă numărătoarea.

Complexity
O(L)
Grade
Grade 10 (Clasa a X-a)

Examples

Example 1

Input

Ana   are    mere   si pere

Expected output

5
Example 2

Input

cuvant

Expected output

1

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

numararea-cuvintelor.cpp
/*
 * Titlu: Numărarea cuvintelor
 * Clasa: 10
 * Capitol: Șiruri de caractere
 * Descriere: Fără strtok: un cuvânt începe acolo unde un caracter diferit de spațiu
 *            urmează după un spațiu (sau se află chiar la începutul șirului). Numărăm
 *            aceste „începuturi”, așa că spațiile multiple dintre cuvinte sau de la
 *            capete nu încurcă numărătoarea.
 * Complexitate: O(L)
 *
 * Exemplu
 * Intrare: Ana   are    mere   si pere
 * Ieșire: 5
 *
 * Exemplu
 * Intrare: cuvant
 * Ieșire: 1
 */
#include <iostream>
using namespace std;

int main()
{
    char s[256];
    cin.getline(s, 256);
    int cuvinte = 0;
    for (int i = 0; s[i] != '\0'; i++)
    {
        if (s[i] != ' ' && (i == 0 || s[i - 1] == ' '))
            cuvinte++;
    }
    cout << cuvinte << '\n';
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.