-1

程序无法正确找到名称“John Fitzgerald Kennedy”的每个部分的子字符串,并且无法在单独的行上输出每个名称。程序输出一个超出范围的异常,甚至不显示第二个名字,只显示第一个。我将如何在每一行输出每个名称?

#include <iostream>
#include <string>

using namespace std;

int main()
{

string fullName="",
        firstName="",
        middleName="",
        lastName="";

cout<<"Enter your full name: ";
cin>>fullName;

firstName=fullName.substr(0,4);
middleName=fullName.substr(4,14);
lastName=fullName.substr(14,19);

cout<<firstName<<endl;
cout<<middleName<<endl;
cout<<lastName;

cin.get();
cin.get();

return 0;
}
4

2 回答 2

1
cin>>fullName;

遇到第一个空格时停止读取标准输入。你需要的是一个类似的命令

getline(cin, fullName);

读取整行以及空格,然后将它们分块以获得名称的不同部分。

于 2013-05-03T02:45:58.420 回答
1

还有一点需要注意的是:

firstName=fullName.substr(0,4);
middleName=fullName.substr(4,14);
lastName=fullName.substr(14,19);

第二个参数substrlength of the substring,而不是子字符串的结束索引,如果你不是说你的名字是 4 个字符长,中间名是 14 个字符长等,你可能需要将它们更新为以下内容:

firstName=fullName.substr(0,4);
middleName=fullName.substr(4,10);
lastName=fullName.substr(14,5);
于 2013-05-03T02:49:53.940 回答