C语言:找到在文件单词中字符个数最多的单词。

第一点:这是一个传回指针的指针函数,所以在定义的时候是char*类型的函数,传进的参数是一个文件指针,(敲重点了,一定一定一定要把文件打开了才能传这个文件指针进来!!)因为这是在你的文本文件里面进行查找最长的单词。

第二点:这个功能实现有点类似于打擂台法,知道打擂台法的uu们应该很容易看懂这个功能,基本算法就是通过每次一边录入一个字符,一边计算录入了多少个字符作为该单词的长度。 当然你肯定会想到用strlen来计算(记得单词末尾要加上\0才可以用哈),这个方法当然可以,但我这个是一边想一边实现的,没有考虑很多,见谅一下~

第三点:因为我在读取文件的时候需要知道一个单词的结束与开始,所以我用了isalpha()函数,所以需要一个头文件ctype.h。isalpha(ch)函数若ch为字母,则返回非零值,若不是则返回0。

第四点功能实现步骤

                                        a)先判断是否是一个单词的开始,即用isalpha函数进行判断是否录入的是一个字母,若是一个字母就进入下一步

                                        b)接下来就是一直录入字符,一直到录入的字符不是字母,也是用isalpha判断。

                                        c)单词长度就是n的大小,最后要对上一个最长单词进行比较,所以在n+1除加上\0才能用strcmp这个函数进行比较。刚刚说了这个功能就是类似于打擂台法,现在说的就是当比较出来比上一个单词还要长就把上一个单词踢掉,对现在最长的单词进行保存下来。

                                         d)最后到了结尾,也就是当文件到了流的末尾,就停止上述操作,对存进的那个最长的单词字符串进行返回,因为我们的函数是指针函数,返回值是一个指针,而且字符串数组也就是数组名(字符中首元素)。

//最后再main里面打印出来你找到的最长单词,并且可以用strlen对该字符串进行长度的测量。

还有一个在这个代码里面学到的是:在函数内部定义想要返回数组就会造成内存泄漏,所以要用全局变量来存放,或者用传一个字符数组的指针作为函数参数,重要指数五个星

#include<stdio.h>
#include<string.h>
#include<ctype.h>//该头文件包含isalpha()这个函数

char temp[50];
//辅助功能,用来临时存放最长的单词,因为在函数内部定义想要返回数组就会造成内存泄漏 


char *Find_MAXword(FILE*fp);


int main(void)
{
    char *max;//接收最长的单词
    FILE*fp;
    fp = fopen("D:/单词文件.txt","r");
    max = Find_MAXword(fp);
    fclose(fp)
    printf("最长的单词为:%s, 长度为:%d",max , strlen(max));

    return 0;
}
char *Find_MAXword(FILE*fp)
{
	char long_word[50];//存放最长的单词
	char ch;
	int n = 0, len = 0, i;
	while(!feof(fp))
	{
		ch = fgetc(fp);
		if(isalpha(ch))
		{
			long_word[n++] = ch;
		}
		else if(!isalpha(ch))
		{
			long_word[n] = '\0';
			if(len <= n - 1)//判断是否遇到比之前最长的单词还要长 ,通过n来判断 
			{
				len = n;//把比之前最长的那个单词长度替换成现在比他长的
				strcpy(temp, long_word);//存放目前找到的最长单词 
			}
			n = 0;
			for(i = 0; i < 50; i++)//用空格清空存放的字符串,继续存放下一个
			{
				long_word[i] = ' ';
			}
		} 
	 } 
	return temp;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹等寒

谢过道友支持,在下就却之不恭了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值