题目:
给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/length-of-last-word
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
思路一:c语言
1、空字符串直接返回0
2、反向遍历字符串,从不等于空格的字符开始计数maxSubStr++,到碰到下一个空格且maxSubStr>0结束,表示获取到了最后一个单词的长度
思路二:c++ stream
拓展:c++ stream 知识拓展
<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
istringstream类用于执行C++风格的串流的输入操作。
ostringstream类用于执行C风格的串流的输出操作。
strstream类同时可以支持C风格的串流的输入输出操作。
常用操作:
1.stringstream::str(); returns a string object with a copy of the current contents of the stream.
2.stringstream::str (const string& s); sets s as the contents of the stream, discarding any previous contents.
3.stringstream清空,stringstream s; s.str("");
4.实现任意类型的转换
template<typename out_type, typename in_value>
out_type convert(const in_value & t){
stringstream stream;
stream<<t;//向流中传值
out_type result;//这里存储转换结果
stream>>result;//向result中写入值
return result;
}
本题使用方法:istringstream
istringstream的构造函数原形如下:
istringstream::istringstream(string str);
它的作用是从string对象str中读取字符。
#include<iostream>
#include<sstream> //istringstream 必须包含这个头文件
#include<string>
using namespace std;
int main()
{
string str="hello world";
istringstream in(str);
string s;
while(in>>s)
{
cout<<s<<endl;
}
}
输出是:
hello
world
参考链接:
https://www.cnblogs.com/hujunzheng/p/5042068.html
https://blog.csdn.net/longzaitianya1989/article/details/52909786
源码:
思路一:
1、空字符串直接返回0
2、反向遍历字符串,从不等于空格的字符开始计数maxSubStr++,到碰到下一个空格且maxSubStr>0结束,表示获取到了最后一个单词的长度
int lengthOfLastWord(char * s){
int strlength = strlen(s);
int maxSubStr=0;
//判断特殊
if(strlength == 0){
return 0;
}
反向遍历
while(strlength--){
//出现空格,并且 maxSubStr>0
if(s[strlength] == ' '&& maxSubStr >0){
return maxSubStr;
}
//有效字符
if(s[strlength] !=' '){
maxSubStr++;
}
}
return maxSubStr;
}
思路二:c++ stream
class Solution {
public:
int lengthOfLastWord(string s) {
istringstream in(s);
string res;
while (in>> res);
//cout << endl<<res;
return res.size();
}
};