Grade 10 · Character stringsCitește în română
Counting the words
Original: Numărarea cuvintelor
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)
- Chapter
- Character strings
Examples
Input
Ana are mere si pere
Expected output
5
Input
cuvant
Expected output
1
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* 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.