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

hen*_*nle 6 c++ string iostream

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

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

通常需要格式化字符串"01 22 42 18".你能直接修改当前的语言环境来做到这一点吗?

Fir*_*aad 5

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

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

  • 您可以使用`boost :: split`将`std :: string`转换为`std :: vector <std :: string>`,然后使用`std :: transform`和`boost :: lexical_cast`进行转换将`std :: vector <std :: string>`转换为`std :: vector <unsigned int>` (2认同)

Jam*_*lis 5

您可以通过创建一个将 ctype 方面分类:为空白的区域设置来实现此目的。

Jerry Coffin 解释了如何在另一个问题的答案中指定空白字符


Jus*_*son 2

看一下scanffscanf。你也许*能够做这样的事情:

int h, m, s, f;
sscanf(a.c_str(), "%d:%d:%d.%d", &h, &m, &s, &f);  
Run Code Online (Sandbox Code Playgroud)

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

  • 是的,使用 C 的“scanf”代替 C++ 的“istream::operator&gt;&gt;”肯定要容易得多。不过,您的意思可能是`sscanf(a.c_str(), "%d:%d:%d.%d", &amp;h, &amp;m, &amp;s, &amp;f) == 4`。 (2认同)