字符串排序:输入5个字符串,安有小到大的顺序输出。试编写相应程序。
#include<stdio.h> //字符串排序实验代码
#include<stdlib.h>
#include<string.h>
int main()
{
char *a[5],ch,*mid; //中间变量mid存放字符串
int count,i,j; //计数器用于动态输入字符串
int T,k=0; //冒泡排序的优化变量T,程序退出变量k
while(1)
{
printf("\n请输入5个字符串:(字符串中不含任何字符则退出)\n");
for(i=0;i<5;i++) //输入循环
{
a[i]=(char *)malloc(sizeof(char)); //使用动态内存分配给字符串指针分配空间
count=0;
while ((ch=getchar()) != '\n') //动态输入字符串不因数组大小而限制字符个数
{
a[i][count]=ch;
count++;
a[i]=(char *)realloc(a[i],(count+1)*sizeof(char));
}
a[i][count] = '\0';
if(count==0) //count=0说明此字符串未输入字符
{
k=1;
break;
}
}
if(k) //退出程序判断
{
printf("程序运行结束\n");
break;
}
for(i=4;i>0;i--) //冒泡排序
{
T=1;
for(j=0;j<i;j++)
if(strcmp(a[j],a[j+1])>0)
{
mid=a[j];
a[j]=a[j+1];
a[j+1]=mid;
T=0; //执行if语句,则T=0,未执行则T=1
}
if(T) //T=1说明字符串已排好序,不必执行后面循环
break;
}
printf("已排序的字符串为:\n");
for(i=0;i<5;i++) //输出循环
printf("%s\n",a[i]);
for(i=0;i<5;i++)
free (a[i]);
}
return 0;
}
这里用了动态分配内存的方法输入字符串,这样就不会因为数组的限制而限制字符串的输入个数,也不会因为数组定义范围太小而出现字符溢出的情况。
(不过并没有什么用,可以直接设置一个大数组存放字符即可)
运行结果: