这个题在《剑指offer》和【LeetCode】上面都有,但是有一定区别。
这篇博客讲《剑指offer》上面的字符串最后一个单词的长度
计算字符串最后一个单词的长度,单词以空格隔开。
输入描述:
一行字符串,非空,长度小于5000。
输出描述:
整数N,最后一个单词的长度。
示例:
输入
hello world
输出
5
我们先展示代码,然后再讲解。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
while(getline(cin,str))
{
size_t pos=str.rfind(' ',str.size());//找到最后一个空格的位置
cout<<str.size()-pos-1<<endl;
}
return 0;
}
因为单词以空格隔开,要求最后一个单词的长度,只需要求出最后一个空格的位置,然后利用 string 类的 size 接口及 rfind 接口就可以解决问题。
但是这个题的难度貌似不在这里,因为要自己输入一行字符串,使用 cin 的时候,当遇到空格,就会终止输入。这个问题才应该是这个问题考察的侧重点,在这里我们用 getline 来解决。
从流到字符串获取行
从提取的字符是并将其存储到STR直到划界字符DELIM被发现(或换行字符,“\ n”,对于(2) )。
如果到达文件末尾或者在输入操作期间发生某些其他错误,则提取也会停止。
如果找到分隔符,则将其提取并丢弃(即不存储它,并且下一个输入操作将在其后开始)。