写一个函数,找出一个英文句子中的最长单词
之前程序实验课上遇到的一道题,由于没做出来,这里有答案后在此记录一下
这里答案是非函数的方法做的,后面我自己尝试着给改成了函数
#include <stdio.h> #include <string.h> int main() { char str[233]; //自定义一个数组 printf("输入所要查询的句子\n");//输入字符串 gets(str); int i,a,b,c; a=b=c=0;//初始化a,b,c为0,a为已经扫描过的单词的当初,b为正在扫描的单词的长度 for(i=0;i<strlen(str);i++)//设置循环进行扫描空格字符 { if(str[i]!=' ')//当数组中对应元素不是空格字符时 b的数值加1,进行计数 { b++; if(a<=b)//将b于a的值进行比较,b大于a,则将b的值赋给a,并通过c来计算最长单词的起始位置 { a=b; c= i-a+1; } continue;//当成条件后终止此次循环 } else //否则则将扫描后的b归零 { b=0; } } printf("最长单词是\n");//输出最长单词 for(i =c;i<c+a;i++) printf("%c",str[i]); }
这个代码其实写出来到不算是难,但是细节的处理很重要,就比如最后那个else和b=0,我是万万没有考虑到的
后面我改成了函数
具体代码如下:
#include <stdio.h> #include <string.h> int findword(char a[]);//函数声明 int main() { char a[100]; gets(a); int beginning; beginning=findword(a); while(a[beginning]!=' '&&a[beginning]!=0){//从最长单词的首字符开始输出,遇到空格字符或者空字符停止 printf("%c",a[beginning]); beginning++;} } int findword(char word[]){//这里findword单词记录的仅仅是最长单词的起始字符。 int n,i,a,b,c; a=b=c=0; n=strlen(word); for(i=0;i<n;i++){ if(word[i]!=' '){//遇到非空格字符时,b的数值加一 b++;//b用来储存当前单词的长度,切记清零 if(a<=b){//a用来储存扫描到的较长单词 a=b; c=i-a+1;//用c来记录最长单词的起始位置 } continue;//这里没有continue可能会导致else和第一个if语句同时执行,导致程序出错 } else b=0;//如果得到的a>b,将b清零,用来记录下一个单词长度,否则b的值会一直增加,导致输出结果错误 } return c; }
由于能力有限,我这个定义的函数就是仅仅把最长单词的首字符作为返回值,后面用while语句来输出。然而函数中其实已经把最长单词的长度求出来了,这点应该可以采用数组作为返回值的方法来处理,但是毕竟能力有限,姑且采用了这么一个不着调的处理方法。
人生如逆旅,我亦是行人