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?

È stato utile?

Soluzione

Date un'occhiata a scanf e fscanf . Si potrebbe * essere in grado di fare qualcosa di simile:

int h, m, s, f;
sscanf(a.c_str(), "%d:%d:%d.%d", &h, &m, &s, &f);  

* Avvertenza: E 'stato un po' per me e C ++

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.

Jerry Coffin spiega come è possibile specificare caratteri di spazio in questa risposta a un'altra domanda .

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top