Si può dire iostreams quali caratteri da trattare come spazi bianchi?
Domanda
In modo che si potrebbe fare qualcosa di simile, per esempio:
std::string a("01:22:42.18");
std::stringstream ss(a);
int h, m, s, f;
ss >> h >> m >> s >> f;
che normalmente richiede la stringa da formattare "01 22 42 18"
.
Si può modificare il locale corrente direttamente per fare questo?
Altri suggerimenti
Non credo che si può cambiare il delimitatore di default senza creare un nuovo locale, ma che sembra hacker. Che cosa si può fare è utilizzare utilizzare getline con un terzo parametro che specifica il delimitatore personaggio o si poteva leggere i delimitatori e non fare nulla con loro (ad es ss >> >> h d >> >> m d >> S >> >> d f).
Si potrebbe anche scrivere la propria classe di analisi che gestisce suddividere stringhe per voi. O meglio ancora, utilizzare boost :: spaccato da Boost String Algoritmi Biblioteca .
È possibile farlo attraverso la creazione di un locale con una sfaccettatura ctype classificare :
come spazi bianchi.
char c;
if (!(ss >> h >> c) || c != ':') return;
if (!(ss >> m >> c) || c != ':') return;
if (!(ss >> s >> c) || c != '.') return;
if (!(ss >> f) || ss >> c) return;