目录
目录题目
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。
输出格式:
按照以下格式输出排序后的结果:
After sorted:
每行一个字符串
输入样例:
red yellow blue black white
输出样例:
After sorted:
black
blue
red
white
yellow
代码
思路
本题算法较为简单,
- 按题意输入5个字符串
- 排序
所以,可以用char a[5][81]来存储5个字符串,并用选择法排序对字符串进行排序。
本题难点在于对字符串数组的运用。
第一次错误尝试
#include<stdio.h>
void sort( int a[], int n );
int main()
{
char a[5][81];
for(int i=0;i<5;;i++)
scanf("%s",&a[i]);
sort(a,5);
printf("After sorted:\n");
for(int i=0;i<5;i++)
{
printf("%s\n",a[i]);
}
return 0;
}
void sort( int a[], int n )
{
int k;//最小值下标
for(int i=0;i<n-1;i++)//第一个未排序元素的下标
{
k=i;
for(int j=i+1;j<n;j++)//在未排序元素中遍历找出最小值
{
if(a[k]>a[j])
{
k=j;
}
}
//已找到未排序元素中的最小值a[k]
//和第一个未排序的元素交换位置
if(k!=i)
{
int min=a[k];
a[k]=a[i];
a[i]=min;
}
}
}
错误原因
很显然,封号不小心用成了中文模式,且sort函数对二维数组的引用是错误的;
2.
for循环不小心多了一个封号,字符串输入漏掉了一个参数81
;
- sort函数直接复制了之前对int型一维数组的代码,与字符串数组不适配。
正确代码
#include<stdio.h>
#include<string.h>
void sort(char a[][81], int n);
int main()
{
char a[5][81];
for (int i = 0; i < 5; i++)
scanf("%s", a[i],81);
sort(a, 5);
printf("After sorted:\n");
for (int i = 0; i < 5; i++)
{
printf("%s\n", a[i]);
}
return 0;
}
void sort(char a[][81], int n)
{
int k;//最小值下标
for (int i = 0; i < n - 1; i++)//第一个未排序元素的下标
{
k = i;
for (int j = i + 1; j < n; j++)//在未排序元素中遍历找出最小值
{
if (strcmp(a[k], a[j]) > 0)
{
k = j;
}
}
//已找到未排序元素中的最小值a[k]
//和第一个未排序的元素交换位置
if (k != i)
{
char min[1][80];
strcpy(min[0], a[k]);
strcpy(a[k], a[i]);
strcpy(a[i], min[0]);
}
}
}
运行结果