本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue black white
输出样例:
After sorted:
black
blue
red
white
yellow
讲解以下字符串函数的知识:
字符串比较函数:
strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;
如果 s1>s2 则返回大于 0。
字符串复制函数
strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
解法1:
思路:遍历五次字符数组,每一次都找出一个最小的字符串,并且每次把最小的字符串赋值为最大的字符值127,使其最大
#include<stdio.h>
#include<string.h>
int main()
{
char data[5][100];
for(int i=0;i<5;i++)
{
scanf("%s",data[i]);
}
printf("After sorted:\n");
for(int i=1;i<=5;i++)
{
int min=0;
for(int j=0;j<5;j++)
{
if(strcmp(data[min],data[j])>0)
{
min=j;
}
}
printf("%s ",data[min]);
data[min][0]=127; //ASCII码中的最大字符 0为最小字符
}
return 0;
}
解法二:使用选择排序进行字符串的排序
#include<stdio.h>
#include<string.h>
int main()
{
char data[5][100],ch[100];
int k;
for(int i=0;i<5;i++)
{
scanf("%s",data[i]);
}
printf("After sorted:\n");
//选择排序
for(int i=0;i<5-1;i++)
{
k=i;
for(int j=i+1;j<5;j++)
{
if(strcmp(data[k],data[j])>0)
{
k=j;
}
}
if(k!=i)
{
strcpy(ch,data[i]);
strcpy(data[i],data[k]);
strcpy(data[k],ch);
}
}
for(int i=0;i<5;i++)
{
printf("%s\n",data[i]);
}
return 0;
}
解法三:使用冒泡排序对字符串进行排序
#include<stdio.h>
#include<string.h>
int main()
{
char data[5][100],ch[100];
for(int i=0;i<5;i++)
{
scanf("%s",data[i]);
}
printf("After sorted:\n");
//冒泡排序
int flag;
for(int i=1;i<5;i++)
{
flag=0;
for(int j=0;j<5-i;j++)
{
if(strcmp(data[j],data[j+1])>0)
{
strcpy(ch,data[j]);
strcpy(data[j],data[j+1]);
strcpy(data[j+1],ch);
flag=1;
}
}
if(flag==0)
{
break;
}
}
for(int i=0;i<5;i++)
{
printf("%s\n",data[i]);
}
return 0;
}