华为OJ-001

字符串最后一个单词的长度

Posted by Shaun on April 6, 2018

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

hello world

输出

5

算法实现

实现1
//思路1:从最后一个字符往前遍历,直到遍历到空格
#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;
    int len;
    while(getline(cin,str)){
        len=0;
        for(int i=str.size()-1;i>=0;i--){
            if(str[i]==' ')
                break;
            len++;
        }
        cout<<len<<endl;
    }
}
实现2
//思路2:使用动态数组来做,输入的字符串依次存入数组中,
//最后返回数组中最后一个元素(字符串)的长度
#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;
}
实现3
//思路3:更精简的方法。
//注意C++11标准中,while(cin>>str)不会跳出循环
#include <iostream>
#include <string>
using namespace std;
int main(){
    string str;
    while(cin>>str);
    cout<<str.size()<<endl;
    return 0;
}

小结

思路1是最容易想到的,思路2和思路3更直观。但是思路2和思路3在某些OJ中可能会出错,因为无法跳出循环。