std::getline

Üdvözlöm, Ön a std::getline szó jelentését keresi. A DICTIOUS-ban nem csak a std::getline 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::getline szót egyes és többes számban mondani. Minden, amit a std::getline szóról tudni kell, itt található. A std::getline szó meghatározása segít abban, hogy pontosabban és helyesebben fogalmazz, amikor beszélsz vagy írsz. Astd::getline é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::getline (tsz. std::getlines)

  1. (informatika) std::getline egy C++ függvény, amelyet szöveges adatok beolvasására használnak egy bemeneti folyamról (std::istream), például egy fájlból (std::ifstream) vagy a standard bemenetről (std::cin). A std::getline egyik legfőbb előnye, hogy egy teljes sort olvas be, és nem áll meg szóköznél, ellentétben az operátorral (>>), amely szóközöknél vagy új soroknál megáll.

Szintaxis

std::getline(std::istream& is, std::string& str);
std::getline(std::istream& is, std::string& str, char delim);
  • is: A bemeneti adatfolyam (std::cin, std::ifstream, stb.).
  • str: Az a std::string változó, amelybe az olvasott sor kerül.
  • delim: Opcionális határoló karakter (alapértelmezett: '\n').

Egyszerű példa

#include <iostream>
#include <string>

int main() {
    std::string sor;
    std::cout << "Adj meg egy sort: ";
    std::getline(std::cin, sor);
    std::cout << "Beolvasott sor: " << sor << std::endl;
    return 0;
}

Működés

  • A felhasználó beír egy teljes sort, és az std::getline elmenti azt a sor változóba.
  • Az std::getline az '\n' karakterig olvas.
  • Az eredményt kiírja a konzolra.

Egyéni határoló használata

#include <iostream>
#include <string>

int main() {
    std::string adat;
    std::cout << "Adj meg egy adatot (':' karakter választja el a végétől): ";
    std::getline(std::cin, adat, ':');
    std::cout << "Beolvasott adat: " << adat << std::endl;
    return 0;
}

Eredmény

Ha a bemenet:

Ez egy példa: további szöveg

akkor a kimenet:

Beolvasott adat: Ez egy példa

Mivel az ':' karakter volt a határoló, az utána következő rész (" további szöveg") kimarad.

std::getline és std::cin problémák

Ha előtte egy std::cin >> műveletet használunk, például egy számot olvasunk be, problémák léphetnek fel:

#include <iostream>
#include <string>

int main() {
    int szam;
    std::string sor;

    std::cout << "Adj meg egy számot: ";
    std::cin >> szam; 
    std::cout << "Adj meg egy sort: ";
    std::getline(std::cin, sor);  

    std::cout << "Szám: " << szam << std::endl;
    std::cout << "Sor: " << sor << std::endl;

    return 0;
}

Probléma: Az std::cin >> szam; után marad egy '\n' a bemeneti pufferben, amit az std::getline rögtön beolvas egy üres sor formájában.

Megoldás:

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Használjuk az ignore-t, hogy kiürítsük a maradék új sort:

#include <iostream>
#include <string>
#include <limits>

int main() {
    int szam;
    std::string sor;

    std::cout << "Adj meg egy számot: ";
    std::cin >> szam;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 

    std::cout << "Adj meg egy sort: ";
    std::getline(std::cin, sor);  

    std::cout << "Szám: " << szam << std::endl;
    std::cout << "Sor: " << sor << std::endl;

    return 0;
}

Fájl beolvasása std::getline segítségével

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream file("example.txt");
    std::string line;

    if (file.is_open()) {
        while (std::getline(file, line)) {
            std::cout << line << std::endl;
        }
        file.close();
    } else {
        std::cerr << "Nem sikerült megnyitni a fájlt!" << std::endl;
    }

    return 0;
}

Működés

  • A program megnyit egy fájlt (example.txt).
  • std::getline soronként olvassa a fájl tartalmát.
  • Az eredményt kiírja a konzolra.

További hasznos példák

String stream feldolgozás

#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::string adat = "Egy,két,három,négy";
    std::stringstream ss(adat);
    std::string resz;

    while (std::getline(ss, resz, ',')) {
        std::cout << resz << std::endl;
    }

    return 0;
}
  • Az std::stringstream egy stringet kezel úgy, mintha egy adatfolyam lenne.
  • Az std::getline ',' határolót használva különálló részekre bontja.

Beolvasás és string manipuláció

#include <iostream>
#include <string>

int main() {
    std::string nev;
    std::cout << "Írd be a teljes neved: ";
    std::getline(std::cin, nev);

    std::cout << "A neved nagybetűkkel: ";
    for (char& c : nev) {
        c = std::toupper(c);
    }
    std::cout << nev << std::endl;

    return 0;
}
  • A felhasználó nevét olvassa be, majd átalakítja nagybetűssé.

Összegzés

  • Egyszerű és hatékony: Az std::getline gyors módszer szöveg soronkénti beolvasására.
  • Határolók testreszabhatók: Nemcsak az '\n', hanem más karakterek is használhatók határolóként.
  • Puffer problémák: std::cin >> után mindig használj std::cin.ignore()-t.
  • Fájlok feldolgozása: std::ifstream segítségével egyszerűen olvashatunk fájlokat.