7-5 字符串排序

发布时间 2023-11-16 23:46:42作者: 刘倩_网安2211

目录

题目

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80

输出格式:
按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:
red yellow blue black white
输出样例:

After sorted:
black
blue
red
white
yellow

代码

思路

本题算法较为简单,

  1. 按题意输入5个字符串
  2. 排序

所以,可以用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

  1. 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]);
        }
    }
}
运行结果


关于二维数组的函数引用