输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
输入:
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