string类题目(下)
题目:字符串里面最后一个单词的长度(牛客网)
然后我们不假思索写出这样的代码:
#include <iostream>
using namespace std;
int main() {
string str;
cin>>str;
size_t pos = str.rfind(' ');
cout<<str.size()-(pos+1)<<endl;//左闭右开
return 0;
}
会发现通过不了,因为我们的cin和scanf遇到空格都会停下,而我们有可能输入多个字符串。默认以空格和换行作为分隔,它以为我们要输入两个字符串而不是一个。另一个没提取到,就在缓冲区里。
就算我们写成这样:
可以发现,就算创建两个string对象,空格也无法被获取到。
那么,怎么办呢?
对于这个问题,C++专门提供了一个东西,叫做getline。
getline
遇到换行才终止。
(Non-member function overloads)
Get line from stream into string
可以看到,空格及其之后的字符串也都被存到str中了。
同时,也可以自己定义终止符。
istream& getline (istream& is, string& str, char delim);
第三个参数就是自己定义的终止符。
所以这道题代码要改为:
#include <iostream>
using namespace std;
int main() {
string str;
getline(cin,str);
size_t pos = str.rfind(' ');
cout<<str.size()-(pos+1)<<endl;//左闭右开
return 0;
}
本文到此结束=_=