华为机试-字符串最后一个单词的长度(较难)
字符串最后一个单词的长度
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