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


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

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

    #include <stdio.h>
    #include <string.h>
    int main()
    {
     char str[233]; //自定义一个数组 
     printf("输入所要查询的句子
    ");//输入字符串 
     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("最长单词是
    ");//输出最长单词 
     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语句来输出。然而函数中其实已经把最长单词的长度求出来了,这点应该可以采用数组作为返回值的方法来处理,但是毕竟能力有限,姑且采用了这么一个不着调的处理方法。

    人生如逆旅,我亦是行人
  • 相关阅读:
    [HTML] IE=edge,chrome=1的META标签详解
    [FFmpeg] ffmpeg 常用命令
    rsyncd 配置使用
    httpd配置
    ftp利用脚本添加本地用户
    zabbix监控概念
    搭建本地yum源并定时同步
    linux添加lvm磁盘大小,命令行创建swap
    500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    利用saltstack批量安装clamav杀毒软件
  • 原文地址:https://www.cnblogs.com/sz2003/p/14048843.html
Copyright © 2020-2023  润新知