【问题标题】:C++ cin whitespace questionC++ cin 空格问题
【发布时间】:2010-04-29 06:58:26
【问题描述】:

这里是编程新手。我试图允许用户在控制台的一行中输入他们的名字,firstName middleName lastName(例如“John Jane Doe”)。我想将 middleName 设为可选。因此,如果用户输入“John Doe”,它只会保存名字和姓氏字符串。如果用户输入“John Jane Doe”,它将保存所有三个。

我打算用这个:

cin >> firstName >> middleName >> lastName;

然后我意识到如果用户选择省略他们的中间名并输入“John Doe”,控制台将等待用户输入第三个字符串......我知道我可以用一个大字符串来完成这个并打破它分为两个或三个,但没有更简单的方法来使用上面的三个字符串吗?

我觉得我在这里遗漏了一些简单的东西......

提前致谢。

【问题讨论】:

    标签: c++ string whitespace cin


    【解决方案1】:

    使用getline,然后使用stringstream进行解析。

    #include <sstream>
    
    string line;
    getline( cin, line );
    istringstream parse( line );
    
    string first, middle, last;
    parse >> first >> middle >> last;
    if ( last.empty() ) swap( middle, last );
    

    【讨论】:

    • 由于 buddyfox 是新手,我威胁要删除我的赞成票,因为您省略了 std:: 前缀。 :)
    • @sbi: 大声笑,std:: 我们不同。我不想吓唬新手,也不想折磨自己;v)。
    • 感谢您的快速回答!这与我的想法相似,但我发布了这个问题,因为我仍然想知道这一切的简单性......我正在看一本有相关问题的教科书,上面写着“提示:你可能想要使用三个字符串变量而不是一个大字符串变量。您可能会发现不使用 getline 更容易。知道他们在做什么吗?
    • @buddyfox:不。据我所知getline 是识别换行符的唯一简单方法。我不认为它包括答案?
    • 不幸的是它没有。它只是提示使用三个变量,而不像我在原始问题中尝试做的那样使用 getline...
    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    相关资源
    最近更新 更多