51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

C语言实现输出用户输入的字符串中最长的单词

C语言实现输出用户输入的字符串中最长的单词

题目要求

要求通过使用函数,输出用户输入的字符串中的所有最长的单词。

我的解题思路

(可能并不是最简洁的)
使用两个函数,一个函数用来计算用户输入的字符串当中最长的单词的长度。另一个函数用于遍历字符串,将符合最长长度的单词直接输出。

函数一:找出字符串中最长单词的长度

逐个字符遍历,根据判断当前遍历到的字符是否是空格,以及其前一位是否是空格,对单词的起始进行判断,然后统计最长的单词的长度。

int longestString(char str[]){                //此函数用于找出字符串中最长单词的长度
    int length = strlen(str);
    int j=0,begin=0,end,maxnum =0;            //此处的j用于表示前一位字符的状态,j为0是空格,j为1不是空格
    for(int i=0;i<=length-1;i++){
        if(str[i]==' '&&j==1){                //*当前字符是空格,前一位字符不为空格、
            end = i;
            if(maxnum<(end-begin)){            //如果当前单词大于最大值
                maxnum = end - begin;        //更新最长单词的长度
            }
            j=0;                            
        }else if(str[i]!=' '&&j==0){        //*当前是字母字符串,前面是空格
            begin = i;                        //新的单词开始,赋值begin
            j=1;                            
        }
        if(i==length-1){                    //*如果是最后一位
             if(maxnum==0){                    //如果遍历到最后一位都显示0,证明数组是一个单词
                 maxnum=length;                //直接将整个数组length赋值给maxnum
                 break;
             }
             if(str[i]!=' '){
                 if(maxnum<(length-begin)){
                maxnum = length - begin;    //此处判断,更新最长单词的长度
                }
            }    
         }
    }
    return maxnum;                            //返回最长单词的长度
}

函数二:用于查找所有长度为最大值的字符串,然后输出

该函数通过接受字符串输出以及前一个函数传入的最长单词长度,对字符串进行遍历判断。同理,通过遍历整个字符串,通过判断空格以及前一位是否为空格然后判断单词的起止时间。如果单词的长度符合最长单词长度的要求,直接遍历输出该单词。

void printLongestString(char str[],int longestLength){            //用于查找所有长度为最大值的字符串,然后输出
    int length = strlen(str),begin=0,end=0,j=0;
    if(length==longestLength){                                    //如果字符串长度就是最大值字符串,证明只有一个单词,直接输出                    
        printf("%s",str);            
    }else{
        for(int i=0;i<=length-1;i++){                            //开始遍历查找数组中符合长度的单词并且输出
            if(i==length-1){
                if(longestLength==(length-begin)){
                  for(int k=begin;k<=length-1;k++){
                      printf("%c",str[k]);
                  }
                }
            }else if(str[i]==' '&&j==1){                    
             end=i;
             if(longestLength==(end-begin)){
                 for(int p=begin;p<=end;p++){
                    printf("%c",str[p]);
                 }
              }
              j=0;
             }else if(str[i]!=' '&&j==0){                    
              begin=i;
              j=1;
            }
        }
    }
}

函数三:主函数,用于调用前两个函数实现逻辑

void main(){                                                    //主函数
    char str[100];
    gets(str);
    int longestString(char str[]);
    void printLongestString(char str[],int longestLength);
    printLongestString(str,longestString(str));                    //调用两个函数
    system("pause");
}

头部引用的头文件如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

接下来看一下运行结果截图:
屏幕截图 2022-11-17 233357.png
屏幕截图 2022-11-17 233511.png
屏幕截图 2022-11-17 233647.png
屏幕截图 2022-11-17 234031.png
屏幕截图 2022-11-17 233202.png
屏幕截图 2022-11-17 233242.png

以上就是本题我自己的个人思路,当然还会有更好的方法。欢迎更多大佬指点一下。

赞(2)
未经允许不得转载:工具盒子 » C语言实现输出用户输入的字符串中最长的单词