Șiruri de caractere în C++ (std::string)
C++ Strings (std::string)
Educațional: teorie, exemple și test pentru programa de bac (citire, concatenare, căutare, subșir, conversii de bază).
Repere
- std::string – secvență mutabilă de caractere.
- Metode cheie:
size()
,empty()
,operator[]
,substr()
,find()
,append()/+=
,erase()
,insert()
. - Citire:
cin
(fără spații),getline()
(cu spații).
Trucuri utile
getline(cin, s)
după uncin >> n
→ consumă newline cucin.ignore()
.- Comparații lexicografice:
==
,<
etc. - Conversii:
stoi/stol/stod
; la C:s.c_str()
.
Teorie – std::string
Theory – std::string
#include <iostream>
#include <string>
using namespace std;
int main(){
string s = "Salut"; // inițializare
s += " lume"; // concatenare
cout << s << " (" << s.size() << ")\n";
cout << s[0] << " ... " << s.back() << '\n';
}
Indexarea pornește de la 0;
at()
verifică limite, operator[]
nu.Operații esențiale
#include <iostream>
#include <string>
using namespace std;
int main(){
string s = "ana are mere";
size_t p = s.find("are"); // poziția subșirului
string t = s.substr(4, 3); // "are"
s.erase(4, 4); // șterge "are "
s.insert(4, "iubește "); // inserează
cout << s << '\n';
}
Citire corectă cu spații
#include <iostream>
#include <string>
using namespace std;
int main(){
int n; cin >> n; cin.ignore(numeric_limits<streamsize>::max(), '\n');
string linie; getline(cin, linie);
cout << "n=" << n << " ; text=\"" << linie << "\"\n";
}
Număr de vocale
#include <iostream>
#include <string>
using namespace std;
bool isVowel(char c){
string v="aeiouAEIOUăĂâÂîÎșȘțȚ";
return v.find(c)!=string::npos;
}
int main(){
string s; getline(cin,s);
int cnt=0; for(char c: s) if(isVowel(c)) cnt++;
cout << cnt << '\n';
}
Inversare și palindrom
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string s; getline(cin,s);
string r=s; reverse(r.begin(), r.end());
cout << (s==r ? "palindrom" : "nu") << '\n';
}
Număr de cuvinte
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string s; getline(cin,s);
string w; int k=0; stringstream ss(s);
while(ss >> w) k++;
cout << k << '\n';
}
Înlocuire subșir (simplă)
#include <iostream>
#include <string>
using namespace std;
int main(){
string s="ana are are mere"; string what="are", with="avea";
for(size_t p=0; (p=s.find(what,p))!=string::npos; p+=with.size())
s.replace(p, what.size(), with);
cout << s << '\n';
}
Conversii numerice
#include <iostream>
#include <string>
using namespace std;
int main(){
string a="1234", b="56";
int x = stoi(a);
long long y = stoll(b);
cout << x+y << '\n';
}
Test – Șiruri de caractere (10 întrebări)
Quiz – Strings (10 questions)
Alege varianta corectă. Vei primi feedback și răspunsurile corecte.
Șabloane de rezolvare (cu using namespace std;
)
Solution patterns (with using namespace std;
)
#include <iostream>
#include <string>
#include <limits>
using namespace std;
int main(){
// 1) citesc N linii, apoi caut un cuvânt cheie în fiecare
int N; cin >> N; cin.ignore(numeric_limits<streamsize>::max(), '\n');
string key; getline(cin, key);
for(int i=0;i<N;++i){
string s; getline(cin, s);
cout << (s.find(key)!=string::npos ? "DA" : "NU") << '\n';
}
}