C语言函数练习笔记

今天主要是将函数习题写完。然后学习了bfs,了解其原理和使用模版,但是还没有实践,在写完今天的总结之后,打算写一写填颜色的bfs算法题目,明天应该会总结和大家分享。

那么今天就简单的将函数习题讲一下,提一下要点和知识点,题目如下:

解题思路:1.输入一行字符串。这里我们可以用scanf函数,将字符串存入一个字符数组中。

2.构建一个自定义函数,函数的主要功能:在字符串中找到所有单词,并比较大小,将最长的单词输出。


解题的关键其实就在自定义函数。我们如何实现上面的功能呢?

我的方法是,构建一个循环,将字符数组遍历,从数组的第一个字符开始找,如果是字母的话就将这个字母存储到一个数组中,因为要输出的是最长的单词,需要比较大小,那么每次在存储操作的时候,我们就可以计数一次,计数就代表长度。

那什么时候遇到不是字母的情况了,我们就可以比较一下大小,如果相比上一个得到的数组要更大,那么我们就将新得到的这个存储数组放入fina数组中。如此遍历比较就可以得到最终的结果,存储在了fina数组中。

大家可以注意到,每次要比较字符串大小,是否可以存储到fina中时,都是在遇到不是字母的情况。那如果最后一个字符也是字母呢?

这是需要考虑的情况。那么我们可以在每次确认字符为字母的时候,同时判断一下其是否为最后一个字符,如果是的话,我们就将下面比较大小的部分执行一遍,这样就相当于独立完成了最后一次比大小得fina数组。


程序的整体逻辑就是这样,然后里面还有一些小细节需要注意,我先贴上代码,然后再作出说明:

本次学习使用的几个函数:

strcpy  字符串内容的复制                        memset    数组数据清除

 
#include<stdio.h>
#include<string.h>

void choose(char a[],int n)
{
	int max =0;
	int m=0;
	char b[100] = { 0 };
	char fina[100] = { 0 };
	for (int i = 0; i < n; i++)
	{
		if (a[i] >= 'a' && a[i] < 'z' || a[i] >= 'A' && a[i] <= 'Z')
		{
			b[m++] = a[i];
			if ((i + 1) == n)//最后一个数字为字母的情况
			{
				if (m > max)
				{
					b[m] = '\0';
					strcpy(fina, b);
					max = m;
				}
			}
		}
		else
		{
			if (m > max)
			{
				b[m] = '\0';//在输出字符串时可以停止
				strcpy(fina, b);
				max = m;
				m = 0;//将m和b数组的数据全部清空
				memset(b, 0, sizeof(b));
			}
		}
	}
		printf("%s", fina);
}

int main()
{
	char a[100] = {0};
	int n = 0;
	scanf("%s", &a);
	n = (int)strlen(a);
	choose(a,n);
	return 0;
}

注意:

在代码中,我们可以看到,每次在存储好fina后,都会将m和数组的数据清除掉。这里因为m我们看做的是字符串的个数,在统计完一个字符串,要统计下一个字符串的时候,需要将其清零才能正确统计下一次的长度。而b数组是存储字符串的,每次我们都会判断这个字符串是否更大,更大的都放进fina了,小的自然就不需要了,而且我们下一次还要用到这个数组存储下一次得到的字符串,所以b数组也要清除数据。

第二点,b【m】='\0' ,这里是因为我们之后输出是直接用printf输出字符串,而在之前的fina数组中并没有‘\0’ ,这样的话就不知道在哪里停止。因为‘\0’是字符串结束的标志,我们在数组最后加上一个‘\0’就可以解决了。

感谢您的阅读,欢迎给出建议和指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值