Clasa a X-a · Șiruri de caractereRead in English
Înlocuirea unui cuvânt cu altul în C++
În engleză: Replacing one word with another
Ideea
Se citesc un text și două cuvinte, vechi și nou (fiecare pe câte un rând). Construim rezultatul într-un șir nou: copiem spațiile așa cum sunt, iar fiecare cuvânt îl extragem întreg și îl comparăm cu vechi folosind strcmp (întoarce 0 la egalitate). Dacă se potrivește scriem nou, altfel cuvântul original. Așa înlocuim doar cuvinte întregi: „ana” nu se înlocuiește în interiorul cuvântului „banana”.
Descrierea în engleză
A text and two words, old and new, are read (each on its own line). We build the result in a new string: spaces are copied as they are, and every word is extracted whole and compared with the old one using strcmp (which returns 0 when equal). If it matches we write the new word, otherwise the original one. This way only whole words are replaced: 'ana' is not replaced inside the word 'banana'.
- Complexitate
- O(L)
- Clasa
- Clasa a X-a (Grade 10)
- Capitol
- Șiruri de caractere
Exemple
Intrare
ana are mere si banana iar ana are pere ana maria
Ieșire așteptată
maria are mere si banana iar maria are pere
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Înlocuirea unui cuvânt cu altul
* Clasa: 10
* Capitol: Șiruri de caractere
* Descriere: Se citesc un text și două cuvinte, vechi și nou (fiecare pe câte un
* rând). Construim rezultatul într-un șir nou: copiem spațiile așa cum
* sunt, iar fiecare cuvânt îl extragem întreg și îl comparăm cu vechi
* folosind strcmp (întoarce 0 la egalitate). Dacă se potrivește scriem
* nou, altfel cuvântul original. Așa înlocuim doar cuvinte întregi:
* „ana” nu se înlocuiește în interiorul cuvântului „banana”.
* Complexitate: O(L)
*
* Exemplu
* Intrare:
* ana are mere si banana iar ana are pere
* ana
* maria
* Ieșire: maria are mere si banana iar maria are pere
*/
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char text[256], vechi[51], nou[51], rezultat[1024];
cin.getline(text, 256);
cin.getline(vechi, 51);
cin.getline(nou, 51);
int i = 0, k = 0;
while (text[i] != '\0')
{
if (text[i] == ' ')
{
rezultat[k++] = text[i++];
}
else
{
char cuvant[256];
int lung = 0;
while (text[i] != '\0' && text[i] != ' ')
cuvant[lung++] = text[i++];
cuvant[lung] = '\0';
const char *deScris = (strcmp(cuvant, vechi) == 0) ? nou : cuvant;
for (int j = 0; deScris[j] != '\0'; j++)
rezultat[k++] = deScris[j];
}
}
rezultat[k] = '\0';
cout << rezultat << '\n';
return 0;
}
Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.