第一个版本,只考虑了简单的情况,未考虑全部是空格,连续好几个空格,空格在最后,空格在开头的种种情况

#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;
}

posted on 2018-03-23 21:23  Mini_Coconut  阅读(536)  评论(0编辑  收藏  举报