最长&最短文本

输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

输入:
hello
she
sorry
he
输出:
he
hello
sorry

ANSWER1:
思路:多个字符串的输入输出问题,无论是cin,还是gets()都不能输入回车键,所以第一种办法是构造结构体chuan{},结构体中声明一个字符串和字符串对应的长度,在主函数中定义一个chuan类型的结构体数组ch[101],再利用输入函数gets()输入ch[i].a即结构体数组中的字符串,注意输入时完整形式是while(gets(ch[i].a)!=NULL)(用while(cin>>ch[i].a)的结果是错的)再利用结构体中的len变量遍历求最小最大长度,最后遍历两遍,满足最小长度的全输出,满足最大长度的也全输出。
代码:

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;

typedef struct chuan{
    char a[1001];
    int len;
}chuan;

int main()
{
    chuan ch[101];//声明结构体数组
    int i=0;
    while(gets(ch[i].a)!=NULL){//利用gets()函数输入
        ch[i].len=strlen(ch[i].a);//输入后顺便记录长度
        i++;
    }

    int n=i;
/*
    for(int j=0;j<n;j++){
         cout<<ch[j].a<<endl;
    }
    */
    int maxlen=ch[0].len,minlen=ch[0].len;
    for(int j=0;j<n;j++){
        if(ch[j].len>maxlen) maxlen=ch[j].len;
        if(ch[j].len<minlen) minlen=ch[j].len;
    }

    for(int j=0;j<n;j++){
        if(ch[j].len==minlen) cout<<ch[j].a<<endl;
    }

    for(int j=0;j<n;j++){
        if(ch[j].len==maxlen) cout<<ch[j].a<<endl;
    }
    return 0;
}

刚开始让人纠结的是怎样结束输入。最后经由网友明白:输入ctrl+Z再输回车,再输一次ctrl+Z再输回车,就可以结束输入

ANSWER2:
思路:利用二维字符数组char srr[1001][1001]存储待输入的多组字符串,思路大致同上,只是这个还要另开辟一个存储对应下标字符串长度的整数型数组int len[1001];
代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
//int minmax(int a[])
int main(){
    char str[1001][1001];//定义一个1001行1001列的二维字符数组,其中str[0],str[5]表示第一行和第六行,均是能容纳1001个字符元素的一维字符数组
    int i=0;
    int len[1001]={0};//定义存储长度的数组
    while(gets(str[i])!=NULL){
        len[i]=strlen(str[i]);
        i++;
    }
    int n=i;
    int min=len[0],max=len[0];
     
    for(int i=1;i<n;i++){
        if(min>len[i]) min=len[i];
        if(max<len[i]) max=len[i];
    }
     
    for(int k=0;k<n;k++){
        if(len[k]==min) cout<<str[k]<<endl;
    }
    for(int k=0;k<n;k++){
        if(len[k]==max) cout<<str[k]<<endl;
    }
     
    return 0;
}

NOTE:
1.gets,getchar,cin,scanf的区别:
gets能包含空格,tab,遇回车结束,但cin不会容忍空格,只会识别连续的字符,遇空格,回车结束,getchar是一个一个的读取字符—看收藏
2.while(gets(str[i])!=EOF)的写法是错的,因为EOF的数据类型是int,而gets返回值类型是char*,所以应是while(gets(str[i])!=NULL)或者while(gets(str[i]))
3.二维字符串数组知识,例如char ch[4][5]定义了一个四行五列的二维字符数组,其中ch[0]表示第一行的字符串,ch[1][4]表示第一行第四列字符
二维字符数组知识详见http://c.biancheng.net/view/273.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值