Clasa a X-a · Șiruri de caractereRead in English
Operații cu std::string în C++
În engleză: Operations with std::string
Ideea
Clasa string din <string> își gestionează singură memoria: se atribuie cu =, se lipește cu +, se compară cu == și <. getline(cin, s) citește tot rândul. Metode folosite: size() (lungimea), find(t) (poziția primei apariții a lui t sau string::npos dacă nu apare), substr(poz, lung) (o bucată), erase(poz, lung) (șterge), insert(poz, t) (inserează) și replace(poz, lung, t) (înlocuiește). Se citesc o frază și un cuvânt.
Descrierea în engleză
The string class from <string> manages its own memory: it is assigned with =, concatenated with +, compared with == and <. getline(cin, s) reads the whole line. Methods used: size() (the length), find(t) (the position of the first occurrence of t, or string::npos if it does not appear), substr(pos, len) (a piece), erase(pos, len) (delete), insert(pos, t) (insert) and replace(pos, len, t) (replace). A sentence and a word are read.
- Complexitate
- fiecare operație este O(L)
- Clasa
- Clasa a X-a (Grade 10)
- Capitol
- Șiruri de caractere
Exemple
Intrare
ana are mere are
Ieșire așteptată
12 4 are ana mere ana are mere ana ARE mere ana are mere!
Intrare
vine vara iarna
Ieșire așteptată
9 nu apare vine vara!
Codul C++
Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.
/*
* Titlu: Operații cu std::string
* Clasa: 10
* Capitol: Șiruri de caractere
* Descriere: Clasa string din <string> își gestionează singură memoria: se atribuie
* cu =, se lipește cu +, se compară cu == și <. getline(cin, s) citește
* tot rândul. Metode folosite: size() (lungimea), find(t) (poziția primei
* apariții a lui t sau string::npos dacă nu apare), substr(poz, lung)
* (o bucată), erase(poz, lung) (șterge), insert(poz, t) (inserează) și
* replace(poz, lung, t) (înlocuiește). Se citesc o frază și un cuvânt.
* Complexitate: fiecare operație este O(L)
*
* Exemplu
* Intrare:
* ana are mere
* are
* Ieșire:
* 12
* 4
* are
* ana mere
* ana are mere
* ana ARE mere
* ana are mere!
*
* Exemplu
* Intrare:
* vine vara
* iarna
* Ieșire:
* 9
* nu apare
* vine vara!
*/
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string s, cuvant;
getline(cin, s);
getline(cin, cuvant);
cout << s.size() << '\n';
size_t poz = s.find(cuvant);
if (poz == string::npos)
{
cout << "nu apare\n";
}
else
{
cout << poz << '\n';
cout << s.substr(poz, cuvant.size()) << '\n';
string t = s;
t.erase(poz, cuvant.size()); // ștergem cuvântul
cout << t << '\n';
t.insert(poz, cuvant); // îl punem la loc
cout << t << '\n';
string mare = cuvant;
for (size_t i = 0; i < mare.size(); i++)
mare[i] = toupper(mare[i]);
t.replace(poz, cuvant.size(), mare); // înlocuim cu varianta cu majuscule
cout << t << '\n';
}
cout << s + "!" << '\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.