你能告诉iostreams将哪些角色视为空格?

时间:2009-10-31 20:03:10

标签: c++ string iostream

所以你可以做这样的事情,例如:

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 个答案:

答案 0 :(得分:5)

我不认为你可以在不创建新语言环境的情况下更改默认分隔符,但这似乎是hackish。您可以使用的是使用getline和第三个参数指定分隔符字符,或者您可以读取分隔符而不对它们执行任何操作(例如,ss>>>>> d>> m >> d>> s>> d>> f)。

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

答案 1 :(得分:3)

您可以通过创建一个ctype facet将:分类为空格的语言环境来完成此操作。

Jerry Coffin explains how you can specify whitespace characters in this answer to another question

答案 2 :(得分:2)

查看scanffscanf。你可以*做这样的事情:

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

*警告:对我和C ++来说已经有一段时间了

答案 3 :(得分: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;