C语言日常练习(五)

C语言日常联系

第五天

今天整理了结构体的相关知识,本来想着就不做题了,最后还是说服了自己,做了一道比较简单的题,如下:

———————————————————————————————
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: “Hello World”
输出: 5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/length-of-last-word
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
———————————————————————————————
一开始的思路是这样的:
找到最后一个空格,记录下它的位置,然后从这个位置开始循环计数,直到退出,就可以得到最后一个单词的长度。
但我马上想到了这种情况"Hello World       ",刚才的思路没办法适用于这种情况,所以得想办法去掉尾部的空格,我定义了另一个函数来实现它,并且还顺便找到了最后一个空格的位置:

int Find(char* s)
{
	int i,flag=0,len = strlen(s);
	for (i = len - 1; i >= 0; i--)
	{
		if (s[i] == ' ')
		{
			len -= 1;
		}
		else
			break;
	}
	for (i = 0; i < len; i++)
	{
		if (s[i] == ' ')
			flag = i;
	}
	return flag;
}

之后再计算单词长度:

int lengthOfLastWord(char * s){
    	int num=0,len = strlen(s);
	for (int i = Find(s)/*这里让循环从最后一个空格处开始*/; i < len; i++)
	{
        if(len==0)
        return 0;
        else if(len==1)
        return s[0]==' '? 0 : 1;
        //特殊情况特殊处理
		if (s[i] == ' ')	//因为是从最后一个空格处开始的没所以忽略第一个空格
		//不能直接从Find(s)+1开始
		//因为如果字符串是"a"的话,它就会从0+1=1开始
			continue;
		else if (s[i] != ' ')	//如果不是空格,计数加一
			num++;
		else	//否则结束循环
			break;
	}
	return num;		//返回结果
}

嘿嘿
C语言日常练习(五)_第1张图片

你可能感兴趣的:(C语言练习)