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;
}
本文来自博客园,作者:竹等寒,转载请注明原文链接。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析