Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;空白问题_C++_String_Whitespace_Cin - Fatal编程技术网

C++ C++;空白问题

C++ C++;空白问题,c++,string,whitespace,cin,C++,String,Whitespace,Cin,这里是编程新手。我试图允许用户在控制台的一行中输入他们的名字,firstName middleName lastName(例如“johnjanedoe”)。我想让middleName成为可选的。因此,如果用户输入“John Doe”,它只保存名字和姓氏字符串。如果用户输入“John Jane Doe”,它将保存所有三个 我打算用这个: cin >> firstName >> middleName >> lastName; 然后我意识到,如果用户选择省略中间名

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

我打算用这个:

cin >> firstName >> middleName >> lastName;
然后我意识到,如果用户选择省略中间名并输入“John Doe”,控制台将只等待用户输入第三个字符串。。。我知道我可以用一个大字符串来完成这个任务,然后把它分成两个或三个,但是有没有一种更简单的方法可以用上面提到的三个字符串来完成呢

我觉得我错过了一些简单的事情


提前感谢。

使用
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 );
#包括
弦线;
getline(cin,line);
istringstream解析(行);
先串,中间串,最后串;
解析>>第一个>>中间>>最后一个;
if(last.empty())交换(middle,last);

使用
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 );
#包括
弦线;
getline(cin,line);
istringstream解析(行);
先串,中间串,最后串;
解析>>第一个>>中间>>最后一个;
if(last.empty())交换(middle,last);

既然buddyfox是个新手,我威胁要取消我的投票,因为你省略了
std::
前缀<代码>:)@sbi:lol,在
std::
上,我们有所不同。我不喜欢吓唬新手,也不喜欢折磨自己;v) .谢谢你的快速回答!这与我的想法相似,但我发布了这个问题,因为我仍然想知道这一切的简单性。。。我正在看一本有相关问题的教科书,上面写着“提示:你可能想使用三个字符串变量,而不是一个大字符串变量。你可能会发现不使用getline更容易。”你知道他们的意思吗?@buddyfox:nope。据我所知,
getline
是识别换行符的唯一简单方法。我想它不包括答案?不幸的是它没有。它只是暗示要使用三个变量,而不是像我在原始问题中尝试的那样使用getline…因为buddyfox是一个新手,我威胁要取消我的投票,因为你省略了
std::
前缀<代码>:)@sbi:lol,在
std::
上,我们有所不同。我不喜欢吓唬新手,也不喜欢折磨自己;v) .谢谢你的快速回答!这与我的想法相似,但我发布了这个问题,因为我仍然想知道这一切的简单性。。。我正在看一本有相关问题的教科书,上面写着“提示:你可能想使用三个字符串变量,而不是一个大字符串变量。你可能会发现不使用getline更容易。”你知道他们的意思吗?@buddyfox:nope。据我所知,
getline
是识别换行符的唯一简单方法。我想它不包括答案?不幸的是它没有。它只是暗示要使用三个变量,而不是像我在最初的问题中尝试的那样使用getline。。。