std::string
Főnév
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
1. std::string létrehozása és inicializálása
A 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
2. std::string műveletek
Az std::string számos beépített műveletet támogat.
📌 a) Összefűzés (+, +=)
#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!
📌 b) Hossz lekérése (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.
📌 c) Karakter elérése ([], .at())
std::string s = "C++";
std::cout << s[0] << 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.
📌 d) Összehasonlítás (==, !=, <, >)
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.
📌 e) Keresés (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.
📌 f) Részstring kivágása (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á"
📌 g) Módosítás (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;
3. String beolvasása felhasználótól
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;
}
4. std::string és char* konverzió
Gyakran szükség lehet std::string és char* között váltani.
📌 a) 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.
📌 b) char* → std::string
const char* cstr = "C++ string";
std::string s = cstr;
std::cout << s << std::endl;
5. std::string használata const &-tal
Nagy 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.
6. std::string és std::vector<char> használata
Ha 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ó.
Összegzés
| 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! 🚀
- std::string - Szótár.net (en-hu)
- std::string - Sztaki (en-hu)
- std::string - Merriam–Webster
- std::string - Cambridge
- std::string - WordNet
- std::string - Яндекс (en-ru)
- std::string - Google (en-hu)
- std::string - Wikidata
- std::string - Wikipédia (angol)