子串提供看似随机的结果,即使它的参数看起来是正确的

时间:2013-01-31 02:53:35

标签: c++ string substring

我的代码应该以两个或多个作者名称读取,用逗号分隔,然后返回第一个作者的姓氏。

cout << "INPUT AUTHOR: " << endl ;
getline(cin, authors, '\n') ;

int AuthorCommaLocation = authors.find(",",0) ;
int AuthorBlankLocation = authors.rfind(" ", AuthorCommaLocation) ;

string AuthorLast = authors.substr(AuthorBlankLocation+1, AuthorCommaLocation-1) ;
cout << AuthorLast << endl ;

但是,当我尝试检索AuthorLast子字符串时,它会将文本从三个字符返回到一个字符太长。对我的错误的任何见解?

1 个答案:

答案 0 :(得分:3)

C ++ substr方法不占用开始和结束位置。相反,它需要一个起始位置和一些要读取的字符。因此,您传入的参数告诉substr从位置AuthorBlankLocation + 1开始,然后从该点向前读取AuthorCommaLocation - 1个字符,这可能是太多字符。< / p>

如果要指定开始和结束位置,可以使用string构造函数的迭代器版本:

string AuthorLast(authors.begin() + (AuthorBlankLocation + 1),
                  authors.begin() + (AuthorCommaLocation - 1));

希望这有帮助!