C语言:将输入的字符串按首字母顺序排列。

设计一个字符串排序输出程序:从键盘上接收用户输入的若干行字符串(最多20行,每行最多100个字符),当输入“end”时表示输入结束。将输入的字符串按从小到大的顺序输出。
例如:输入:
jdgf
ieur
duhf
end
输出: dhuf
ieur
jdgf
注:多用几种方法;最好比较易懂的!!!

#include<stdio.h>

#include<string.h>

void sort(char *a[]);

void print(char *a[]);

int main()

{

char *a[] ={"ceo","define","basic","abc","empty"};

printf("原来的序列是:\n");

print(a);

sort(a);

printf("\n排序后的序列是:\n");

print(a);

printf("\n");

return 0;

}

void sort(char *a[])

{

int i,j;

char *temp;

for(i=0;i<4;i++)//注意是i<4

{

for(j=0;j<4;j++)//注意是j<4,因为下面要+1和后面的那个字符串比较

{

if(strcmp(a[j],a[j+1])>0)//字符串比较:>0表示前面的字符串比后面的大则交换

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

}

}

void print(char *a[])

{

int i;

for(i=0;i<5;i++)

{

printf("%s ",a[i]);

}

}

运行效果:

扩展资料:

return 0的用法:

return的作用是结束正在运行的函数,并返回函数值。return后面可以跟一个常量,变量,或是表达式

函数的定义一般是这样的,例如:

inta(inti)//第一个int是函数的返回值的类型,也就是return后面跟的值的类型,a是函数的名称,括号里的是传递给函数的参数,int是参数的类型,i是参数的名字

...//省略函数体内容

returnb;//b必须与函数头的返回值一致(此处为int型)

简单函数举例:

intaddOne(intb)

returnb+1;

该函数的作用是取得一个数,将这个数加上1,再将结果返回

调用时这样:

intresult=addOne(2);//此时result的值为3

函数括号里的参数也可以为变量或能算出值的表达式

以上就是一个基本的函数,一般的函数都有返回值,也就是return后面跟的值,返回值可以为各种数据类型,如:int,float,double,char,a[](数组),*a(指针),结构或类(c++)

但不是所有函数都有返回值,如果某个函数无返回值,那么返回值的位置则为“void”关键字,此时函数体中无返回值,即无return的值。但是函数中也可出现return,即一个空的return句子,其作用是使函数立即结束,如voidprint()//括号中为空表示无传递参数、

printf("a");

printf("b");

return;//函数执行到此处结束

printf("c");

}//该函数只执行到return语句处,即屏幕上输出的为"ab"

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-18
提供一个吧!效率不是很高,当做抛砖引玉吧
#include <stdio.h>
#include <string.h>
#include <process.h>
void main()
{
char re[21][100];
int i=0;
while(i<21&&strcmp(re[i-1],"end")!=0)
{
printf("please input the %d strings\n",i+1);
gets(re[i++]);
}
for (int j=0;j<i-2;j++)
for (int k=j+1;k<i-1;k++)
if (strcmp(re[j],re[k])>0)
{
char temp[100];
strcpy(temp,re[k]);
strcpy(re[k],re[j]);
strcpy(re[j],temp);
}
printf("\nafter ordered!\n");
for (j=0;j<i-1;j++)
{
printf("%s\n",re[j]);
}
system("pause");
}本回答被提问者采纳
第2个回答  推荐于2018-03-23
将输入的字符串按首字母顺序排列函数:
#include<stdio.h>
void main()
{
char c[10];
int i;
int j;
int temp;
gets(c);
for(i = 0;i<9;i++)
for(j = 0;j<9;j++)
if(c[j]>c[j+1])
{
temp = c[j];
c[j] = c[j+1];
c[j+1] = temp;
}
puts(c);
}
第3个回答  2015-10-13
提供一个吧!效率不是很高,当做抛砖引玉吧
#include <stdio.h>
#include <string.h>
#include <process.h>
void main()
{
char re[21][100];
int i=0;
while(i<21&&strcmp(re[i-1],"end")!=0)
{
printf("please input the %d strings\n",i+1);
gets(re[i++]);
}
for (int j=0;j<i-2;j++)
for (int k=j+1;k<i-1;k++)
if (strcmp(re[j],re[k])>0)
{
char temp[100];
strcpy(temp,re[k]);
strcpy(re[k],re[j]);
strcpy(re[j],temp);
}
printf("\nafter ordered!\n");
for (j=0;j<i-1;j++)
{
printf("%s\n",re[j]);
}
system("pause");
}
第4个回答  2010-11-20
jdgf

jdgf
ieur
duhf
end
输出: dhuf本回答被网友采纳
相似回答