您的位置:首页 > 编程语言 > C语言/C++

华为机试题:字符串最后一个单词的长度

2016-11-15 22:47 369 查看
题目描述:

计算字符串最后一个单词的长度,单词以空格隔开。

输入描述:

一行字符串,非空,长度小于5000。

输出描述:

整数N,最后一个单词的长度。

输入例子:

hello world

输出例子:

5

输入有空格的字符串时,主要的两种方法:

string s;
char c;
while((c=cin.get())!='\n');
s = s + c;
//或者
string s;
getline(cin, s);
//第二种更为常用


方法一:刚看到这道题初始的想法是,使用迭代器,从最后开始,直到遇到空格的那个单词的长度就是答案。

代码:

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s;
char c;
while((c=cin.get())!='\n')
s=s+c;

int m = 0;
for (auto i = s.rbegin(); ((*i)!=' ')&&(i!=s.rend()); ++i)
m++;

cout << m << endl;

return 0;
}


方法二:对于c++而言,使用动态数组也许会让代码更加简洁,可以直接输出最后一个字符的长度。

#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main(){
string input;
vector<string>arr;
while(cin>>input){
arr.push_back(input);
}
cout<<arr[arr.size()-1].length()<<endl;
return 0;
}


方法三:还看见有些讨论当最后是空格的情况,这时候方法一就不行了,这时候就要把最后输入空格的情况排除掉了。

#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
while(getline(cin,s)){
int n=0,flag=1;
for(int i=s.length()-1;i>=0;--i){//倒着计算
if(flag && s[i]==' '){//如果末尾有空格,先清除末尾空格
continue;
}
else if(s[i]!=' '){
flag = 0;
++n;
}
else{
break;
}
}
cout << n << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  华为 c++