👤
a fost răspuns

Buna!
Ma poate ajuta cineva la problema asta? Nu inteleg cum functioneaza functia strstr , adica nu inteleg la ce ma ajuta ca imi returneaza pointer-ul cu prima aparitia a sirului t in sirul s.
Daca rezolvati cu un while, imi explicati ce se intampla in while?
#200 EliminareSubsir1
Cerinţa
Se dau două şiruri de caractere s şi t. Să se elimine din s doar ultima apariţie a lui t.

Date de intrare
Programul citește de la tastatură cel două şiruri, s, respectiv t, separate prin caracterul NewLine.

Date de ieşire
Programul afișează pe ecran şirul s, obţinut după transformarea cerută.

Restricţii şi precizări
cele două şiruri conţin cel mult 255 caractere.

Exemplu
Intrare

ana si mariana canta la nai
na
Ieșire

ana si mariana canta la i
Multumesc!


Răspuns :

#include <iostream>

#include <cstring>

using namespace std;

int main(){

char s[256], t[256];

cin.getline(s, 256);

cin.getline(t, 256);

char *p = strstr(s, t), *precedent = NULL;

while(p != NULL){ // cat timp mai exista aparitii ale lui t in s

precedent = p; // memoram ultima adresa

p = strstr(p+1, t); // si mergem la urmatoarea aparitie

}

//aici precedent va avea adresa ultimei aparitii a lui t in s, sau NULL daca t nu apare in s

strcpy(precedent, precedent+strlen(t)); // scoatem ultima aparitie

cout << s; // afisam sirul modificat

}