Ranbo_ 发表于 2020-2-28 14:44:05

按照原文本中的顺序输出最短和最长的字符串

输入包括多行字符串,字符串的长度len(1<=len<=1000)。按原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,全部输出。

例:
          输入:
hello
she
sorry
he
          输出:
he
hello
sorry
有一点要注意的就是没有说字符串有没有空格,所以不用scanf输入字符串,用gets函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct String
{
    char str;
    int length;
}String;

String strings;      //假设最多100个字符串

int main()
{
    char ch;
    //char longest = {0}, shortest = {0};
    int i = 0;
    while(gets(strings.str))//字符串可能有空格,所以不能用scanf,用gets接收
    {
      strings.length = strlen(strings.str);
      i++;
    }//一共输入了i个字符串
    int l, s;
    l = s = strings.length;//初始化最长最短字符串的长度
    int count_short = {0}, count_long = {100};//记录最长最短字符串的位置
    int count_s = 0, count_l = 100;//最长最短字符串的标记位置
    for(int j = 1; j < i; j++)
    {
      if(strings.length > l)//找到了比最长字符串更长的
      {
            count_l++;
            count_long = count_l;
            l = strings.length;
      }
      else if(strings.length < s)//找到了比最短字符串更短的
      {
            count_s++;
            count_short = count_s;
            s = strings.length;
      }
      else if(strings.length == l)//找到了与最长字符串等长的
      {
            count_long = count_l;
      }
      else if(strings.length == s)//找到了与最短字符串等长的
      {
            count_short = count_s;
      }
    }//循环结束时count_s和count_l记录的是最短最长字符串的标记位置
    for(int k = 0; k < i; k++)
    {
      if(count_short == count_s)
            printf("%s\n", strings.str);
    }
    for(int k = 0; k < i; k++)
    {
      if(count_long == count_l)
            printf("%s\n", strings.str);
    }
   
    return 0;
}
之所以将count_s和count_l设置成0和100,是为了防止输出时的识别错误导致输出错误。


其实我设置的tag有点多,没有必要设置这么多tag


页: [1]
查看完整版本: 按照原文本中的顺序输出最短和最长的字符串