Ce face std::istream::get
flux >> c sare peste spații. flux.get(c) citește următorul caracter oricare ar fi el: literă, spațiu, tab sau '\n'. Este felul de a citi un text caracter cu caracter, exact cum este.
Varianta fără argumente, get(), returnează caracterul ca int, sau EOF la final. Perechea pentru scriere este put(c), care scrie un caracter într-un flux de ieșire.
Atenție: un caracter cu diacritice, în UTF-8, înseamnă doi octeți, deci get îl citește din două bucăți.
Parametri
| Parametru | Descriere |
|---|---|
c |
Variabila char în care se pune caracterul citit / caracterul de scris. |
Ce returnează
get(c) și put(c) returnează fluxul; get() returnează caracterul sau EOF.
Exemple
Exemplul 1: Numărarea spațiilor și a rândurilor
#include <iostream>
#include <sstream>
int main() {
std::istringstream text("Ana are mere.\nMihai are pere.\n");
char c;
int spatii = 0, randuri = 0, total = 0;
while (text.get(c)) {
++total;
if (c == ' ') ++spatii;
if (c == '\n') ++randuri;
}
std::cout << total << " caractere, " << spatii << " spații, " << randuri << " rânduri\n";
}
Rezultat
30 caractere, 4 spații, 2 rânduri
Exemplul 2: Copiere caracter cu caracter, cu put
#include <iostream>
#include <sstream>
int main() {
std::istringstream in("a-b-c");
char c;
while (in.get(c)) {
std::cout.put(c == '-' ? '+' : c);
}
std::cout.put('\n');
}
Rezultat
a+b+c
Exemplul 3: Diacriticele sunt câte doi octeți
#include <iostream>
#include <sstream>
int main() {
std::istringstream in("aș");
int c;
while ((c = in.get()) != EOF) {
std::cout << c << ' ';
}
std::cout << '\n';
}
Rezultat
97 200 153
Greșeli frecvente
- Stochezi rezultatul lui
get()într-uncharși compari cuEOF: pe unele platforme comparația nu funcționează. Folosește unintsau variantaget(c).
Comenzi înrudite
std::istream::peek: Arată următorul caracter din intrare fără să-l consume.std::istream::ignore: Sare peste caractere din intrare, de obicei până la sfârșitul rândului curent.std::getline: Citește un rând întreg, cu spații cu tot, într-un std::string.