string handling (tsz. string handlings)
A stringek (karakterláncok) a szöveges adatok tárolására és kezelésére szolgálnak C++-ban. Két fő módja van a stringek kezelésének:
std::string
osztály (a modern C++ ajánlott megoldása)Ebben a cikkben mindkét módszert bemutatjuk, majd a stringek kezeléséhez szükséges legfontosabb függvényeket és műveleteket.
char
tömb)A C-ben és a régebbi C++ verziókban a karakterláncokat karaktertömbökben tárolták. A karakterlánc végét egy \0
(null karakter) jelöli.
#include <iostream>
using namespace std;
int main() {
char nev = "Hello";
cout << "Nev: " << nev << endl;
return 0;
}
📌 Fontos: A nev
tömb tartalmazza a "Hello\0"
karakterláncot, ahol a \0
a végét jelzi.
A cin
nem tud szóközt tartalmazó szöveget beolvasni, ezért cin.getline()
vagy fgets()
függvényt kell használni.
#include <iostream>
using namespace std;
int main() {
char nev;
cout << "Add meg a neved: ";
cin.getline(nev, 50);
cout << "Hello, " << nev << "!" << endl;
return 0;
}
std::string
)A C++ Standard Library biztosítja az std::string
osztályt, amely dinamikusan kezeli a karakterláncokat, így sokkal kényelmesebb, mint a char
tömbök.
std::string
deklarálása és használata#include <iostream>
#include <string>
using namespace std;
int main() {
string nev = "Péter";
cout << "Nev: " << nev << endl;
return 0;
}
✅ Előnyök az std::string
használatával: - Nem kell előre meghatározni a méretet - Támogatja a könnyű műveleteket (+
, +=
, stb.) - Számos beépített függvény elérhető
std::string
függvények)
#include <iostream>
#include <string>
using namespace std;
int main() {
string nev;
cout << "Add meg a neved: ";
getline(cin, nev); // Beolvas egy teljes sort
cout << "Üdv, " << nev << "!" << endl;
return 0;
}
📌 getline(cin, nev)
: Beolvas egy teljes sort, szóközökkel együtt.
+
és +=
)#include <iostream>
#include <string>
using namespace std;
int main() {
string vezeteknev = "Kovács";
string keresztnev = "Péter";
string teljesNev = vezeteknev + " " + keresztnev;
cout << "Teljes nev: " << teljesNev << endl;
return 0;
}
📌 +
operátorral stringeket fűzhetünk össze.
length()
vagy size()
)string szoveg = "Hello";
cout << "A string hossza: " << szoveg.length() << endl;
📌 Megjegyzés: length()
és size()
ugyanazt az eredményt adja.
és at()
)string szoveg = "Hello";
cout << "Elso karakter: " << szoveg << endl;
cout << "Masodik karakter: " << szoveg.at(1) << endl;
📌 gyorsabb, de nem ellenőrzi a határokat.
📌 at()
biztonságosabb, mert ellenőrzi az érvényes indexet.
compare()
)string a = "apple";
string b = "banana";
if (a.compare(b) < 0) {
cout << "Az 'apple' kisebb, mint 'banana'." << endl;
}
📌 compare()
: Visszaad: - 0 ha egyenlő - Negatív érték ha a
kisebb, mint b
- Pozitív érték ha a
nagyobb, mint b
find()
)string szoveg = "Hello, világ!";
size_t pozicio = szoveg.find("világ");
if (pozicio != string::npos) {
cout << "'világ' megtalálható a " << pozicio << ". pozíción." << endl;
} else {
cout << "'világ' nem található meg." << endl;
}
📌 find()
visszaadja a keresett kifejezés kezdőindexét, vagy string::npos
ha nincs találat.
substr()
)string szoveg = "Hello, világ!";
string resz = szoveg.substr(7, 5); // "világ"
cout << "Kivágott rész: " << resz << endl;
📌 substr(index, hossz)
: Kivág egy adott részt a stringből.
insert()
, erase()
, replace()
)string szoveg = "Hello, világ!";
szoveg.insert(6, "kedves "); // "Hello, kedves világ!"
szoveg.erase(6, 7); // "Hello, világ!"
szoveg.replace(7, 5, "C++"); // "Hello, C++!"
cout << szoveg << endl;
📌 insert()
: Beszúr egy részt adott helyre.
📌 erase()
: Töröl adott hosszúságú részt.
📌 replace()
: Lecserél adott részt másik szövegre.
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main() {
string szoveg = "Hello, World!";
for (char &c : szoveg) {
c = toupper(c); // Nagybetűsítés
}
cout << "Nagybetűs: " << szoveg << endl;
for (char &c : szoveg) {
c = tolower(c); // Kisbetűsítés
}
cout << "Kisbetűs: " << szoveg << endl;
return 0;
}
📌 toupper()
és tolower()
karakterenként módosítja a stringet.
char
tömb) – Régi módszer, kevésbé ajánlott.std::string
osztály – Dinamikus és könnyen kezelhető.getline()
)+
, +=
)length()
)find()
)insert()
, erase()
, replace()
)compare()
)A modern C++ programozásban az std::string
a legjobb választás! 🚀