简单的C ++子串问题

时间:2013-05-03 02:43:08

标签: c++ string substring substr

程序无法正确查找名称“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;
}

2 个答案:

答案 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);