回答
std::ctype_base::space
是std::istream
的分隔符,它使其停止从源读取更多字符。
std::ctype_base::space
引用空格和换行符。这意味着,当使用cin>>s
进行阅读时,s
可以包含除空格和换行符之外的任何字符。
如果要读取包含空格的完整行,则可以使用getline()
函数,该函数使用换行符作为分隔符。还有它的重载函数,如果你想提供你自己的分隔符,你可以使用它。 See it's documentation for further detail。
您也可以使用自定义区域,你可以设置为std::istream
。您的自定义语言环境可以定义一组字符作为分隔符std::istream
。你可以在这里看到一个这样的例子(见我的解决方案):
分隔符是任何针对std::isspace(ch, std::sin.getlocale())
返回true字符ch
。换句话说,无论什么 浸入式语言环境认为“白色空间”。 (虽然我会 认为这有点滥用,我知道程序员创建 特殊的语言环境,这考虑如,
空白,并使用 >>
读取逗号分隔的列表。)
我想我在这里滥用它(是否真的滥用?):http://stackoverflow.com/questions/5607589/right-way-to-split-an-stdstring-into-a-vectorstring – Nawaz 2011-05-23 09:10:05
我认为它是。调用逗号空格是恕我直言的滥用,并且令人困惑。这也是危险的:被植入的区域被用于其他的东西,比如解析数字。 (想想如果你使用的是法语语言环境的结果,其中'',''也是小数点分隔符。)我通常更喜欢这个操作符。分隔符应该取决于语言环境。 (逗号是小数点时,分号通常用作分隔符。)但是我们确实需要一个单独的条目。 (这是'std :: complex'的一个问题,'''操作符是不可用的。) – 2011-05-23 10:56:59
@James:如何使用植入语言环境来解析数字?你能解释一下吗? – Nawaz 2011-05-23 11:01:59
- 1. 使用noskipws从ifstream读取字符串时的空字符串
- 2. C++ ifstream字符串
- 3. C++ ifstream的着阅读的字符串,并得到错误,当读取字符
- 4. C++ std :: ifstream:检查字符是否被读取
- 5. ifstream错误读取字符串
- 6. 使用ifstream从字符串读取数据的特定部分
- 7. 如何读取由C++中的空格分隔的字符串?
- 8. 如何读取由c:中的“:”分隔的两个字符串
- 9. 使用C的字符串分隔符
- 10. 带分隔符的C#子字符串
- 11. 分隔带分隔符的字符串
- 12. 读取iostream直到找到字符串分隔符
- 13. 有效途径从ifstream的读取到字符串流
- 14. 分隔符分隔字符串RadTreeView VB.NET
- 15. Objective C字符串分隔
- 16. C字符串分隔
- 17. 分隔字符串C
- 18. C++如何从字符串中读取两行来分隔字符串?
- 19. c#拆分字符串与一些分隔符和分隔符
- 20. NSInputStream包装以指定的分隔符读取字符串
- 21. 用“||”分隔字符串分隔符
- 22. 包含完整字符串分隔符的提取字符串
- 23. 如何读取由空格分隔的无符号字符c
- 24. 分隔符分隔字符串的TreeView C#
- 25. Javascript以字符行尾字符串分隔字符串并读取每行
- 26. 分隔字符串
- 27. C++和字符串连接分隔符
- 28. 从字符串中读取多个逗号分隔的双打
- 29. std ::向带自定义分隔符的字符串向量
- 30. 分隔字符串与分隔符
我想我明白你的”试着说,但'std :: ctype_base :: space'是一个'enum',并且是一个掩码值,它只能用作'std :: ctype <> :: is'的参数。而这又取决于所处的语言环境,原则上可以做任何事情。 – 2011-05-23 09:06:26
@詹姆斯:嗯..我明白了。我的编辑版本(水平线之后)可能解释更好? : -/ – Nawaz 2011-05-23 09:08:05
是的,虽然我会考虑你所指的滥用解决方案。重要的事情要记住的是1)白色空间是分隔符,2)什么被认为是白色空间是语言环境依赖,在流中浸入的语言环境。 – 2011-05-23 10:51:45