/*
题目描述:计算字符串最后一个单词的长度,单词以空格隔开。
输入:一行字符串,非空,长度小于5000。
输出:整数N,最后一个单词的长度。
*/
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char str[5000];
//cin>>str;
//错误一:cin的输入以空格未结束标志,但是输入的字符串中可能有空格,就会出错
gets(str);
//gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取
int len=strlen(str);
if(0!=len)
{
int num=0;
while(' '==str[len-1])//注意:要考虑字符串末尾有空格的情况
len--;
for(int i=len-1;i>=0;i--)
{
if(' '==str[i])
break;
num++;
}
cout<<num<<endl;
}
return 0;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin,str);
if (""!=str)//字符串非空
{
int num=0;
int pos=str.find_last_not_of(' ',string::npos);//从后往前找第一个不是空格的字符位置
while ( pos>=0 && ' '!=str.at(pos) )//注意' '!=str.at(pos)必须放在后面,因为at()会检查是否越界
{
num++;
pos--;
}
cout<<num<<endl;
}
return 0;
}
/*注意' '!=str.at(pos)必须放在后面,因为at()会检查是否越界
如果最后一个单词的长度就是整个字符串的长度,pos=0满足执行循环体后pos=-1,
at(-1)会抛出异常,而pos>=0放在前面发现条件不满足直接退出循环,不会出现at(-1)的情况
*/