std::string

Üdvözlöm, Ön a std::string szó jelentését keresi. A DICTIOUS-ban nem csak a std::string szó összes szótári jelentését megtalálod, hanem megismerheted az etimológiáját, a jellemzőit és azt is, hogyan kell a std::string szót egyes és többes számban mondani. Minden, amit a std::string szóról tudni kell, itt található. A std::string szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Astd::string és más szavak definíciójának ismerete gazdagítja a szókincsedet, és több és jobb nyelvi forráshoz juttat.

Főnév

std::string (tsz. std::strings)

  1. (informatika) string handling

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 << 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::stringchar*

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! 🚀