知交

写一个函数,找出一个英文句子中的最长单词

之前程序实验课上遇到的一道题,由于没做出来,这里有答案后在此记录一下

这里答案是非函数的方法做的,后面我自己尝试着给改成了函数

#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语句来输出。然而函数中其实已经把最长单词的长度求出来了,这点应该可以采用数组作为返回值的方法来处理,但是毕竟能力有限,姑且采用了这么一个不着调的处理方法。

 

posted on 2020-11-27 16:30  知交  阅读(1001)  评论(0编辑  收藏  举报

导航