第一点:这是一个传回指针的指针函数,所以在定义的时候是char*类型的函数,传进的参数是一个文件指针,(敲重点了,一定一定一定要把文件打开了才能传这个文件指针进来!!)因为这是在你的文本文件里面进行查找最长的单词。
第二点:这个功能实现有点类似于打擂台法,知道打擂台法的uu们应该很容易看懂这个功能,基本算法就是通过每次一边录入一个字符,一边计算录入了多少个字符作为该单词的长度。 当然你肯定会想到用strlen来计算(记得单词末尾要加上 才可以用哈),这个方法当然可以,但我这个是一边想一边实现的,没有考虑很多,见谅一下~
第三点:因为我在读取文件的时候需要知道一个单词的结束与开始,所以我用了isalpha()函数,所以需要一个头文件ctype.h。isalpha(ch)函数若ch为字母,则返回非零值,若不是则返回0。
第四点:功能实现步骤:
a)先判断是否是一个单词的开始,即用isalpha函数进行判断是否录入的是一个字母,若是一个字母就进入下一步。
b)接下来就是一直录入字符,一直到录入的字符不是字母,也是用isalpha判断。
c)单词长度就是n的大小,最后要对上一个最长单词进行比较,所以在n+1除加上 才能用strcmp这个函数进行比较。刚刚说了这个功能就是类似于打擂台法,现在说的就是当比较出来比上一个单词还要长就把上一个单词踢掉,对现在最长的单词进行保存下来。
d)最后到了结尾,也就是当文件到了流的末尾,就停止上述操作,对存进的那个最长的单词字符串进行返回,因为我们的函数是指针函数,返回值是一个指针,而且字符串数组也就是数组名(字符中首元素)。
//最后再main里面打印出来你找到的最长单词,并且可以用strlen对该字符串进行长度的测量。
还有一个在这个代码里面学到的是:在函数内部定义想要返回数组就会造成内存泄漏,所以要用全局变量来存放,或者用传一个字符数组的指针作为函数参数,反正就是不能return任何一个在函数内部定义的东西!!重要指数五个星
#include#include #include //该头文件包含isalpha()这个函数 char temp[50]; //辅助功能,用来临时存放最长的单词,因为在函数内部定义想要返回数组就会造成内存泄漏 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] = ' '; if(len <= n - 1)//判断是否遇到比之前最长的单词还要长 ,通过n来判断 { len = n;//把比之前最长的那个单词长度替换成现在比他长的 strcpy(temp, long_word);//存放目前找到的最长单词 } n = 0; for(i = 0; i < 50; i++)//用空格清空存放的字符串,继续存放下一个 { long_word[i] = ' '; } } } return temp; }



