我的代码应该以两个或多个作者名称读取,用逗号分隔,然后返回第一个作者的姓氏。
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
子字符串时,它会将文本从三个字符返回到一个字符太长。对我的错误的任何见解?
答案 0 :(得分:3)
C ++ substr
方法不占用开始和结束位置。相反,它需要一个起始位置和一些要读取的字符。因此,您传入的参数告诉substr
从位置AuthorBlankLocation + 1
开始,然后从该点向前读取AuthorCommaLocation - 1
个字符,这可能是太多字符。< / p>
如果要指定开始和结束位置,可以使用string
构造函数的迭代器版本:
string AuthorLast(authors.begin() + (AuthorBlankLocation + 1),
authors.begin() + (AuthorCommaLocation - 1));
希望这有帮助!