这样你就可以做这样的事情,例如:
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"
。您可以直接修改当前语言环境来执行此操作吗?
我不认为您可以在不创建新语言环境的情况下更改默认分隔符,但这似乎很骇人听闻。您可以使用getline和指定分隔符的第三个参数,或者您可以读取分隔符而不对它们做任何事情(例如 ss >> h >> d >> m >> d >> s >> d > > f)。
您还可以编写自己的解析类来处理拆分字符串。或者更好的是,使用Boost 的String Algorithms Library中的boost::split。
您可以通过创建一个带有分类:
为空白的 ctype facet 的语言环境来做到这一点。
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;