C++ cin 空格问题

Posted

技术标签:

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

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

我打算用这个:

cin >> firstName >> middleName >> lastName;

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

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

提前致谢。

【问题讨论】:

【参考方案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...

以上是关于C++ cin 空格问题的主要内容,如果未能解决你的问题,请参考以下文章

c++利用cin.get()输入带空格的一串数据【追加悬赏】

c++中 cincin.get()cin.getline()cin.getchar()的区别

C ++中的cin忽略空格-基本编程[重复]

C ++:带有空格的cin到没有getline函数的字符串

c++ 文件操作 如何处理空格的

c++怎么输出空格