关闭

华为机试题 001计算字符串最后一个单词的长度

标签: 华为机考刷题
93人阅读 评论(0) 收藏 举报
分类:
/*
题目描述:计算字符串最后一个单词的长度,单词以空格隔开。
输入:一行字符串,非空,长度小于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)的情况
*/


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:918次
    • 积分:46
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档