たとえば、次のようなことができます。
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"
。これを行うために現在のロケールを直接変更できますか?
新しいロケールを作成せずにデフォルトの区切り文字を変更できるとは思いませんが、それはハックのようです。使用できることは、区切り文字を指定する 3 番目のパラメーターを指定してgetlineを使用することです。または、区切り文字を読み取って何もしないこともできます (例: ss >> h >> d >> m >> d >> s >> d > > f)。
文字列の分割を処理する独自の解析クラスを作成することもできます。またはさらに良いことに、Boost のString Algorithms Libraryからboost::splitを使用します。
:
これを行うには、空白として分類される ctype ファセットを使用してロケールを作成します。
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;