Citirea unui text cu spații
#include <iostream>
using namespace std;
int main() {
char s[256];
cin.getline(s, 256);
cout << s;
return 0;
}Atenție: Citirea obisnuita se opreste la primul spatiu. Pentru o linie intreaga se foloseste getline in C++, fgets in C, readln in Pascal si input in Python.
Numărarea cuvintelor
Un cuvânt nou începe acolo unde caracterul curent NU e spațiu, iar cel dinainte E spațiu (sau suntem la început):
#include <iostream>
using namespace std;
int main() {
char s[256];
cin.getline(s, 256);
int nr = 0;
for (int i = 0; s[i] != '\0'; i++)
if (s[i] != ' ' && (i == 0 || s[i - 1] == ' '))
nr++;
cout << nr;
return 0;
}Atenție: Un cuvant incepe acolo unde caracterul nu e spatiu dar cel dinainte era. Asa se numara corect si cand intre cuvinte sunt mai multe spatii.
Pentru "ana are mere" (cu două spații la mijloc): nr = 3 ✓: metoda e robustă la spații multiple.
Afișarea inițialelor
Aceeași condiție de "început de cuvânt":
#include <iostream>
using namespace std;
int main() {
char s[256];
cin.getline(s, 256);
for (int i = 0; s[i] != '\0'; i++)
if (s[i] != ' ' && (i == 0 || s[i - 1] == ' '))
cout << s[i];
return 0;
}Pentru "limba si literatura romana": afișează lslr.
Prima literă mare la fiecare cuvânt (capitalizare)
#include <iostream>
using namespace std;
int main() {
char s[256];
cin.getline(s, 256);
for (int i = 0; s[i] != '\0'; i++)
if (s[i] >= 'a' && s[i] <= 'z' && (i == 0 || s[i - 1] == ' '))
s[i] = s[i] - 'a' + 'A';
cout << s;
return 0;
}Atenție: Diferenta dintre codul unei minuscule si al majusculei corespunzatoare e 32. Pascal are upcase, Python are upper; in C si C++ se face prin scaderea lui a si adunarea lui A.
"ion popescu" devine "Ion Popescu". Conversia folosește aritmetica pe coduri: distanța 'a'-'A' e constantă (32).
Extragerea cuvintelor cu strtok (varianta din manuale)
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[256];
cin.getline(s, 256);
char *cuv = strtok(s, " ");
while (cuv != 0) {
cout << cuv << "\n";
cuv = strtok(0, " ");
}
return 0;
}Atenție: Python are split, care face totul dintr-o data. In C si C++ se foloseste strtok, iar in Pascal se taie repetat cu pos, copy si delete.
Primul apel primește șirul, următoarele primesc 0; strtok MODIFICĂ șirul original (pune '\0' în locul separatorilor).
Greșeli frecvente
- Numărarea spațiilor + 1 NU dă numărul de cuvinte când există spații consecutive sau la margini.
- strtok distruge șirul: fă o copie dacă îl mai folosești.
- Conversia la majusculă doar pentru litere mici: fără condiția a-z, strici cifrele și semnele.