std::string (tsz. std::strings)
Az std::string
az alapértelmezett karakterlánc-típus C++-ban. A C-ben használt nullával lezárt karaktertömbökkel (char
) szemben az std::string
egy dinamikus, egyszerűen kezelhető és biztonságos szövegkezelő osztály, amely a C++ Standard Template Library (STL) része.
✅ Miért érdemes std::string
-et használni?
✔ Könnyebb és biztonságosabb kezelni, mint a char
tömböket
✔ Beépített műveletek (összefűzés, keresés, méretlekérdezés stb.)
✔ Dinamikusan kezeli a memóriát
✔ Automatikusan felszabadítja az erőforrásokat
std::string
létrehozása és inicializálásaA std::string
használatához be kell illeszteni a <string>
fejlécfájlt:
#include <iostream>
#include <string>
int main() {
std::string szoveg1 = "Helló, világ!";
std::string szoveg2("C++ string példája");
std::cout << szoveg1 << std::endl;
std::cout << szoveg2 << std::endl;
return 0;
}
🔹 Kimenet:
Helló, világ! C++ string példája
✅ Többféleképpen inicializálhatunk egy std::string
változót:
std::string ures; // Üres string
std::string masik = "Hello"; // Direkt inicializálás
std::string harmadik("C++"); // Konstruktor használata
std::string negyedik(5, 'A'); // "AAAAA" -> 5 db 'A' karakter
std::string
műveletekAz std::string
számos beépített műveletet támogat.
+
, +=
)#include <iostream>
#include <string>
int main() {
std::string nev = "Anna";
std::string koszontes = "Helló, " + nev + "!";
std::cout << koszontes << std::endl;
koszontes += " Jó napot!";
std::cout << koszontes << std::endl;
return 0;
}
🔹 Kimenet:
Helló, Anna! Helló, Anna! Jó napot!
size()
, length()
)std::string s = "Hello";
std::cout << "Hossz: " << s.length() << std::endl; // 5
std::cout << "Méret: " << s.size() << std::endl; // 5
✔ A size()
és a length()
ugyanazt csinálja.
, .at()
)std::string s = "C++";
std::cout << s << std::endl; // 'C'
std::cout << s.at(1) << std::endl; // '+'
✔ A s.at(n)
biztonságosabb, mert ha az index érvénytelen, kivételt dob.
==
, !=
, <
, >
)std::string a = "alma";
std::string b = "banán";
if (a < b) {
std::cout << "Az 'alma' kisebb, mint a 'banán'!" << std::endl;
}
✔ A std::string
lexikografikusan hasonlítja össze a szavakat.
find()
, rfind()
)std::string szoveg = "C++ programozás";
size_t pos = szoveg.find("C++");
if (pos != std::string::npos) {
std::cout << "Találat pozíciója: " << pos << std::endl;
}
✔ Ha a find()
nem találja a szót, std::string::npos
értéket ad vissza.
substr()
)std::string s = "C++ programozás";
std::string resz = s.substr(4, 10); // 4. karaktertől 10 hosszúságú rész
std::cout << resz << std::endl; // "programozá"
append()
, insert()
, replace()
, erase()
)std::string s = "Hello";
s.append(" világ!"); // "Hello világ!"
s.insert(5, ","); // "Hello, világ!"
s.replace(7, 5, "C++"); // "Hello, C++!"
s.erase(5, 2); // "HelloC++!"
std::cout << s << std::endl;
A std::cin
alapértelmezés szerint csak egy szót olvas be.
Ha teljes sort szeretnénk beolvasni, használjuk a std::getline()
függvényt:
#include <iostream>
#include <string>
int main() {
std::string nev;
std::cout << "Add meg a neved: ";
std::getline(std::cin, nev);
std::cout << "Szia, " << nev << "!" << std::endl;
return 0;
}
std::string
és char*
konverzióGyakran szükség lehet std::string
és char*
között váltani.
std::string
→ char*
std::string s = "Hello";
const char* cstr = s.c_str();
std::cout << cstr << std::endl;
✔ A c_str()
egy nullával lezárt C-stílusú karaktertömböt ad vissza.
char*
→ std::string
const char* cstr = "C++ string";
std::string s = cstr;
std::cout << s << std::endl;
std::string
használata const &
-talNagy stringek esetén érdemes konstans referenciát (const &
) használni a függvények paramétereinél, hogy elkerüljük a másolást.
📌 Példa:
#include <iostream>
#include <string>
void kiir(const std::string &szoveg) {
std::cout << szoveg << std::endl;
}
int main() {
std::string uzenet = "C++ stringek hatékony kezelése!";
kiir(uzenet); // A string nem másolódik le
return 0;
}
✔ Hatékonyabb, mert a const &
nem másolja le az egész stringet.
std::string
és std::vector<char>
használataHa karakterek tömbjeként szeretnénk kezelni egy std::string
-et, használhatjuk az std::vector<char>
-t:
#include <iostream>
#include <vector>
#include <string>
int main() {
std::string s = "Hello";
std::vector<char> v(s.begin(), s.end());
for (char c : v) {
std::cout << c << " ";
}
return 0;
}
✔ std::vector<char>
dinamikusan kezelhető, és karakterenként módosítható.
Funkció | Leírás |
---|---|
+ , +=
|
Stringek összefűzése |
size() , length()
|
String hossza |
, at()
|
Karakter elérése |
find() , substr()
|
Keresés és részstring kivágása |
append() , insert() , erase()
|
Módosítások |
getline()
|
Felhasználói bemenet |
c_str()
|
char* konverzió
|
Az std::string
egyszerűsíti és biztonságosabbá teszi a szövegkezelést C++-ban! 🚀