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

我不认为您可以在不创建新语言环境的情况下更改默认分隔符,但这似乎很骇人听闻。您可以使用getline和指定分隔符的第三个参数,或者您可以读取分隔符而不对它们做任何事情(例如 ss >> h >> d >> m >> d >> s >> d > > f)。

您还可以编写自己的解析类来处理拆分字符串。或者更好的是,使用Boost 的String Algorithms Library中的boost::split

于 2009-10-31T20:19:21.577 回答
4

您可以通过创建一个带有分类:为空白的 ctype facet 的语言环境来做到这一点。

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 回答