题目描述

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

方法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