cin std::string 带空格

cin std::string with spaces

我想从 std::cin 读取一个名为 destinationstd::string,直到给定的分隔符。默认情况下,当我执行 destination << std::cin 时,std::istream::operator<< 在 space 之后中断。如果 destinationchar[],我可以使用 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
}