有趣的算法问题10——最后一个单词的长度
从今天开始简单的算法正式进入有趣的算法,激不激动?兴不兴奋?
所有算法均是用c++编写
所有题目均是来自计蒜客
题目
给定由大写,小写字母和空格组成的字符串,返回 最后 一个单词的长度。
如果输入中不存在单词,返回 0。
注意:“单词”是指不包含空格符号的字符串
例如:
对于字符串”hello World”(不带引号), 那么返回的结果是5;
对于字符串”abc abc “(不带引号,这里有空格的喔~!),那么返回的结果就是3。
输入格式
输入仅一行,为字符串 s(长度不超过 10000)。
输出格式
输出 s 中最后一个单词的长度。
形如:
样例输入1
Today is a nice day
样例输出1
3
样例输入2
The quick brown fox jumps over the lazy dog
样例输出2
3
刨坑点:
1.这道题最大的陷进就是在输入完字符的时候给你很多空格,你有用肉眼看不出来,这个才是真正的坑,我也是凭着我的直觉判断里面可能有很多的空格,然后我把有空格的全部都挑出来。这也可能是怕做项目时,好多熊孩子违规输入吧!!~~
2.我的思路是从最后一个开始找最后的一个单词管它有没有空格先把它算进去,第二次再来做细分。也是说第一次最先确定最后一个单词的位置,然后第二次再来数单词的个数就行了。
代码
#include <string>
using namespace std;
int main(){
string s;
getline(cin,s);
int j=0;
int num=0;
for(int i=s.length()-1;i>=0;i--,j++){
if(s.data()[i]==' '&&s.data()[i-1]!=' '&&s.data()[i+1]!=' '&&i!=s.length()-1){
break;
}
}
for(int z=s.length()-j;z<s.length();z++){
if(s.data()[z]!=' '){
num++;
}
}
cout<<num;
return 0;
}
测试
我其实在最后输入了很多空格只是显示不出来…
测试成功!~