华为机试-字符串最后一个单词的长度(较难)
字符串最后一个单词的长度
http://www.nowcoder.com/questionTerminal/8c949ea5f36f422594b306a2300315da
题目描述
计算字符串最后一个单词的长度,单词以空格隔开。
方法1:
比较简洁,利用了cin的特性,到空格或者回车停止读取。(我要夸夸自己)
int main(){
string s;
while(cin>>s);
cout<<s.size();
return 0;
}如果笔试是填写函数话
#include<sstream>
#include<algorithm>
int solution(string s){
stringstream ss;
reverse(s.begin(),s.end());
ss<<s;//stringstream和输入流一样,默认读取到空格或'\n',但不能像前面一样写while(ss<<s),会重复读取第一个单词,因为s不更新
ss>>s;
return s.length();
}方法2:
用getline读取全部字符串(回车时停止),倒序遍历找到第一个空格或者越界0的情况。
#include<iostream>
using namespace std;
int main(){
string s;
getline(cin,s);
if(s.length()==0) return 0;
int i;
for(i=s.length()-1;i>=0&&s[i]!=' ';i--);
cout<<s.length()-(i+1);//或者 cout<<(s.substr(i+1)).size();
return 0;
}补充:
#include <string> getline(输入流,string类型的引用存储流信息,截断字符-默认'\n')
方法3:
字符串反序,这样最后一个字符串就放到了最前面
用find函数找到第一个空格的pos
存在时,减下差值就是结果;不存在空格时,说明只有一个单词吗,直接返回length
