第一个版本,只考虑了简单的情况,未考虑全部是空格,连续好几个空格,空格在最后,空格在开头的种种情况
#include<iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int total = s.size();
for(int i = s.size()-1;i>=0;i--)
{
if(s[i] == ' ')
{
cout<<s.size()-1-i<<endl;
return 0;
}
}
return 0;
}
第二个版本,考虑的全面一点,就是指针用的挺多的,可读性也不是太好
#include<iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin,s);
int total = s.size();
char *p=&s[total-1];
while(*p== ' ')//从字符后面开始判断有没有空格,没有指针不动
{
if(p==s)//如果判断到头,证明全是空格,输出0
{
cout<< 0<<endl;
return 0;
}
p--;//有的话就往前移
}
char *end =p;
for(char *k=p;k!=s;k--)//从现在的尾部开始查
{
if(*k==' ')//碰到空格就输出一共移了几次
{
cout<< p-k <<endl;
return 0;
}
}
cout<< end-&s[0]+1 <<endl;//如果一直没碰到空格,证明就一个单词,输出长度
return 0;
}