cin std::string 带空格
cin std::string with spaces
我想从 std::cin
读取一个名为 destination
的 std::string
,直到给定的分隔符。默认情况下,当我执行 destination << std::cin
时,std::istream::operator<<
在 space 之后中断。如果 destination
是 char[]
,我可以使用 std::getline
。
我们有什么用 std::string?
使用std::getline
,像这样:
std::string InputWithSpaces;
std::getline (std::cin,InputWithSpaces);
std::cout << InputWithSpaces << std::endl; //test 1 2 3
你的前提是错误的:std::getline
确实适用于 std::string
:
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input,
std::basic_string<CharT,Traits,Allocator>& str,
CharT delim );
这意味着您可以从 std::cin
读取到 std::string
直到给定的分隔符:
std::string destination;
std::getline(std::cin, destination, '|');
(以'|'
为例分隔符)
注意:您应该在阅读destination
之前检查getline
的return。 getline
return 对 std::cin
的引用可以转换为 bool
,如果流处于正确状态,其值为 true
:
if (std::getline(std::cin, destination, '|') == false) {
// error handling
}
我想从 std::cin
读取一个名为 destination
的 std::string
,直到给定的分隔符。默认情况下,当我执行 destination << std::cin
时,std::istream::operator<<
在 space 之后中断。如果 destination
是 char[]
,我可以使用 std::getline
。
我们有什么用 std::string?
使用std::getline
,像这样:
std::string InputWithSpaces;
std::getline (std::cin,InputWithSpaces);
std::cout << InputWithSpaces << std::endl; //test 1 2 3
你的前提是错误的:std::getline
确实适用于 std::string
:
template< class CharT, class Traits, class Allocator >
std::basic_istream<CharT,Traits>& getline( std::basic_istream<CharT,Traits>& input,
std::basic_string<CharT,Traits,Allocator>& str,
CharT delim );
这意味着您可以从 std::cin
读取到 std::string
直到给定的分隔符:
std::string destination;
std::getline(std::cin, destination, '|');
(以'|'
为例分隔符)
注意:您应该在阅读destination
之前检查getline
的return。 getline
return 对 std::cin
的引用可以转换为 bool
,如果流处于正确状态,其值为 true
:
if (std::getline(std::cin, destination, '|') == false) {
// error handling
}