程序无法正确查找名称“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;
}
答案 0 :(得分:1)
cin>>fullName;
在遇到第一个空格时停止读取标准输入。你需要的是像
这样的命令getline(cin, fullName);
读取整行以及空格,然后将它们分块以获得名称的不同部分。
答案 1 :(得分:1)
还有一点需要注意:
firstName=fullName.substr(0,4);
middleName=fullName.substr(4,14);
lastName=fullName.substr(14,19);
substr
中的第二个参数是length of the substring
, NOT 子字符串的结束索引,如果你不是说你的名字长4个字符,中间name是14个字符长等,您可能需要将它们更新为以下内容:
firstName=fullName.substr(0,4);
middleName=fullName.substr(4,10);
lastName=fullName.substr(14,5);