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