7

たとえば、次のようなことができます。

std::string a("01:22:42.18");
std::stringstream ss(a);
int h, m, s, f;
ss >> h >> m >> s >> f;

通常、文字列をフォーマットする必要があります"01 22 42 18"。これを行うために現在のロケールを直接変更できますか?

4

4 に答える 4

5

新しいロケールを作成せずにデフォルトの区切り文字を変更できるとは思いませんが、それはハックのようです。使用できることは、区切り文字を指定する 3 番目のパラメーターを指定してgetlineを使用することです。または、区切り文字を読み取って何もしないこともできます (例: ss >> h >> d >> m >> d >> s >> d > > f)。

文字列の分割を処理する独自の解析クラスを作成することもできます。またはさらに良いことに、Boost のString Algorithms Libraryからboost::splitを使用します。

于 2009-10-31T20:19:21.577 に答える
4

:これを行うには、空白として分類される ctype ファセットを使用してロケールを作成します。

Jerry Coffin は、別の質問に対するこの回答で空白文字を指定する方法を説明しています

于 2009-10-31T20:25:52.937 に答える
2

scanffscanfを見てください。次のようなことができるかもしれません:

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

* 注意: 私と C++ にとっては久しぶりです

于 2009-10-31T20:16:12.317 に答える
2
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;
于 2009-10-31T20:17:21.033 に答える