设计一个字符串排序输出程序 C语言

设计一个字符串排序输出程序:从键盘上接收用户输入的若干行字符串(最多20行,每行最多100个字符),当输入“end”时表示输入结束。将输入的字符串按从小到大的顺序输出。
例如:输入
wanyan
aaa
yaoli
teacher
end
输出
aaa
teacher
wanyan
yaoli

设计要求:
(1) 设计一个输入函数,函数原型如下:
int inputString(char s[][100]);
函数功能:从键盘上接收若干个字符串保存到输入参数s二维数组中(s数组中一行保存一个字符串),同时函数返回输入的字符串数目;
注意:“从键盘上输入一串字符串保存到一个二维数组的第i行”是inputString函数的一个关键设计。我们一般有两种设计方法:
其一,从键盘依次读取一个字符,这个字符是回车符输入结束;否则,依序保存到二维数组的第i行,即如下设计:
for(int j=0; ; j++) {
char c=getchar();
if(c==’\n’) break;
s[i][j]=c;
}
注意:本题设计不允许用这种设计!!!
其二,采用gets()函数进行输入。
“从键盘上输入一串字符串保存到一个一维字符数组”这个处理我们已经很熟悉了gets(s),s是一个一维字符数组的数组名,其实,数组名就是一个数组的起始存放地址,gets(s)函数从键盘逐个接收输入的字符顺序保存到从s开始的地址中。
那么,我们如何实现“从键盘上输入一串字符串保存到一个二维数组t的第i行”?即,gets()的输入参数是什么?gets(t)显然不对,因为t代表的是一个二维字符数组的数组名,无法传递给gets()函数这样的信息:输入数据保存到t数组的第i行。
提示:对于二维数组计算机是当作一维数组看待的,即: char t[20][100],计算机认为t是一维数组(长度为20),这个一维数组的每个元素(即t[i])又是一个一维字符数组(长度为100),所以我们不难知道“从键盘上输入一串字符串保存到一个二维数组t的第i行”该如何表达了.
(2) 设计一个字符串排序函数,函数原型如下:
void sortString(char s[][100], int ArraySize);
函数功能:输入参数为一个二维字符数组,该数组中保存了若干条字符串(s数组中一行保存一个字符串),字符串数目由ArraySize变量指示,请按字符串的大小从低到高输出s中保存的所有字符串。
提示:比较两个字符串可以用strcmp()函数。
(3) 设计一个main函数组织整个程序。
#include<stdio.h>
#include<string.h>
int main( )
{
char s[20][100],temp[100];
int i,j,n;
for(i=0;i<20;i++)
{
gets(s[i]);
if(s[i][0]=='e'&&s[i][1]=='n'&&s[i][2]=='d')
{
n=i;
break;
}
}
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(s[i],s[j])>0)
{
strcpy(temp,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],temp);
}
for(i=0;i<n;i++)
puts(s[i]);
return 0;
}
我只是不知道怎么设计成inputString和sortString两个函数

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

int main() 
{      
int inputString (char s[][100]); //函数声明
void sortString (char s[][100], int ArraySie); //函数声明
char a[20][100];   
int count; 

count = inputString (a); //函数调用
printf ("字符串排序后:\n");
sortString (a, count); //函数调用
   
return 0; 
}  

int inputString (char s[][100]) //函数定义,这也就是你不明白的地方吧
{
int n, i;

printf ("请输入要排序的字符串:\n"); 
    for(i=0;i<20;i++)
{
gets(s[i]);
if(s[i][0]=='e'&&s[i][1]=='n'&&s[i][2]=='d')
{
n=i;
            break;
}
}

return n;
}

void sortString (char s[][100], int ArraySie) //函数定义,这也就是你不明白的地方吧
{
int i, j;
char temp[100];

for(i=0;i<ArraySie;i++)
for(j=i+1;j<ArraySie;j++)
if(strcmp(s[i],s[j])>0)
{
strcpy(temp,s[i]);
                strcpy(s[i],s[j]);
                strcpy(s[j],temp);
}
for(i=0;i<ArraySie;i++)
puts(s[i]);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-11-26
用字符串数组存储,比较用函数比较大小,排序可以冒泡排序
相似回答