Cum funcționează
Ideea greșită, dar tentantă: „numărul de cuvinte = numărul de spații + 1". Cade imediat ce textul
începe sau se termină cu spațiu — exact ce avertizează enunțul. Pentru " ana are mere " ai număra
5 cuvinte în loc de 3.
Metoda corectă numără tranzițiile: un cuvânt nou începe când treci de la un spațiu la o literă.
Flagul inCuvant reține unde te afli:
text: a n a _ a r e
inCuvant: T T T F T T T
nr: 1 1 1 1 2 2 2
↑ ↑
tranzitie tranzitie
Incrementarea se face doar la !inCuvant, adică exact când intri într-un cuvânt după un spațiu
(sau la începutul textului, unde flagul pornește false). Literele următoare din același cuvânt nu
mai numără nimic, pentru că flagul e deja true.
Metoda funcționează automat pentru toate cazurile-limită:
- spații la început — flagul rămâne
false până la prima literă
- spații la final — flagul trece pe
false, dar nu se mai numără nimic
- text gol — bucla nu se execută, rezultatul e
0
cin.getline(s, 201), nu cin >> s — cu >> ai citi doar primul cuvânt și ai obține mereu 1.
Dimensiunea e 201 pentru „cel mult 200 de caractere", plus terminatorul.
Aceeași tehnică, cu un separator extins, rezolvă și
afișarea cuvintelor pe linii distincte.
Greșeli frecvente
- Numărarea spațiilor + 1 — greșit când textul începe sau se termină cu spațiu, exact cazul
avertizat de enunț.
cin >> s — se citește doar primul cuvânt, rezultatul e mereu 1.
- Incrementarea la fiecare literă — se numără caracterele, nu cuvintele.
- Flagul neresetat la întâlnirea spațiului — tot textul apare ca un singur cuvânt.
char s[200] — lipsește locul terminatorului.