Într-un text cu cel mult 102 caractere cuvintele sunt formate din litere mici ale alfabetului englez și sunt
separate prin câte un spațiu. Scrieți un program C/C++ care citește de la tastatură un text de tipul
menționat, pe care îl modifică în memorie, inserând cuvântul succes între oricare două cuvinte ale sale
care se termină cu aceeași literă. Cuvântul inserat este separat prin câte un spațiu de cuvintele vecine.
Textul transformat este afișat pe ecran, iar dacă nu există perechi de astfel de cuvinte, se afișează pe
ecran mesajul nu exista.
Exemplu: dacă textul citit este testez validez utilizez date corecte acum
se obține textul testez succes validez succes utilizez date succes corecte acum

Răspuns :

Răspuns:

#include <iostream>

#include <cstring>

using namespace std;

int main()

{

char s[103], t[501] = "";

cin.getline(s, 103);

 

char *p = strtok(s, " "), c = '\0';

 

while (p != NULL)

{

 if (p[strlen(p) - 1] == c)

  strcat(t, "succes ");

 

 strcat(t, p);

 strcat(t, " ");

 

 c = p[strlen(p) - 1];

 p = strtok(NULL, " ");

}

 

cout << t;

 

return 0;

}

Explicație:

In algoritmul de mai sus am parcurs fiecare cuvant din textul dat folosindu-ma de funtia "strtok" din cstring. Daca cuvantul parcurs are ultima litera egala cu ultima litera a cuvantului de dinainte (retinuta in 'c'), atunci inserez cuvantul succes, iar indiferent daca se respecta acea conditie inserez cuvantul pe care l-am parcurs. La inceput c este egal cu '\0' (sau 0), asta ca sa ma asigur ca nu va fi egal cu litera primului cuvand, deci ca sa nu inserez "succes" la inceput. O observatie e ca l-am construit pe 't' (care e rezultatul) in memorie, si nu am facut din afisare, pentru ca asa specifica cerinta. Alta observatie este ca marimea lui t este 501, asta pentru ca daca s ar avea 51 de cuvinte de forma "x", t ar ajunge sa fie "x succes x succes ...", deci ar avea 51 * 2 - 1 + 50 * 7 = 451 caractere (am rotunjit la 500).

Daca nu stii cum functioneaza functiile din cstring (strtok, strlen) anunta-ma!