字符串排序

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

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

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

After sorted:
每行一个字符串

输入样例:

red yellow blue green white

输出样例:

After sorted:
blue
green
red
white
yellow

思路一:用一个二维数组a[5][100]记录五个字符串,用b[5]记录对应字符串是否已经排序,用c[5]记录排序好的字符串下标。排序算法是拿一个未排序的字符与其他所有未排序的字符串依次比较,得到最小的字符串下标,记录到c[5]数组中,再将其记录为已排序。(算法比较繁琐)

#include <stdio.h>
#include <string.h>

int main() {
    char a[5][100];
    int b[5] = {0};//记录是否已经排序
    int c[5];//记录排序好的下标
    int i, j, min;
    for (i = 0; i < 5; i++) {
        scanf("%s", &a[i]);
    }
    for (i = 0; i < 5; i++) {
        for (j = 0; j < 5; j++) {
            if (b[j] == 0) {//找到第一个未排序的字符串下标
                min = j;
                break;
            }
        }
        for (j = 0; j < 5; j++) {
            if (b[j] == 0 && strcmp(a[j], a[min]) <= 0) {//找到最小的字符串的下标
                min = j;
            }
        }
        c[i] = min;//记录下标
        b[min] = 1;//标记已排序
    }
    printf("After sorted:\n");
    for (i = 0; i < 5; i++) {
        printf("%s\n", a[c[i]]);
    }
    return 0;
}

思路二:使用指针数组p,让p数组的每个指针分别指向a数组的对应的行。通过选择排序算法排序得到结果。

#include <stdio.h>
#include <string.h>

int main() {
    char a[5][100];
    char *p[5];
    int i, j, min;
    for (i = 0; i < 5; i++) {
        scanf("%s", &a[i]);
        p[i] = a[i];//使p数组里的指针指向a数组的对应的行
    }
    char *temp;
    //选择排序算法
    for (i = 0; i < 4; i++) {
        min = i;
        for (j = i + 1; j < 5; j++) {
            if (strcmp(p[min], p[j]) > 0) {
                min = j;
            }
        }
        temp = p[i];
        p[i] = p[min];
        p[min] = temp;
    }
    printf("After sorted:\n");
    for (i = 0; i < 5; i++) {
        printf("%s\n", p[i]);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值