C语言实现输入 n 个字符串,将它们按字母由小到大的顺序排列并输出

完整代码:

// 输入 n 个字符串,将它们按字母由小到大的顺序排列并输出
#include<stdio.h>
#include<stdlib.h>
//字符串的最大长度
#define N 20

//交换两个字符串在数组中的位置
void swap(char **str1,char **str2){
    char *temp=*str1;
    *str1=*str2;
    *str2=temp;
}

//比较字符串大小
int my_strcmp(char *str1, char *str2) {
    //当字符相差为0时且两个字符不同时为'\0'(字符串结尾),此时两个字符相等,移动到下一个字符继续比较
    while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2) {
        str1++;
        str2++;
    }
    return *str1 - *str2;
}

//冒泡排序
void sort(char **str,int n){
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n-i-1; j++)
        {
            //较大的字符串往数组上面移动
            if (my_strcmp(str[j],str[j+1])>0)
            {
                swap(&str[j],&str[j+1]);
            }
        }
    }
}

int main(){
    int n;
    printf("请输入字符串个数n:");
    scanf("%d",&n);
    //读取缓冲区的回车字符
    getchar();
    //动态分配空间存储字符串数组,就是分配有n个字符串的数组
    char **str=(char**)malloc(n*sizeof(char*));
    for (int i = 0; i < n; i++)
    {
        //分配数组中每个字符串的空间,就是字符串中能有多少个字符
        str[i]=(char *) malloc(N * sizeof(char));
        printf("请输入第%d个字符串\n",i+1);
        gets(str[i]);
    }
    printf("排序前字符串为:\n");
    for (int j = 0; j < n; j++)
    {
        printf("%s\n",str[j]);
    }
    sort(str,n);
    printf("排序后字符串为:\n");
    for (int j = 0; j < n; j++)
    {
        printf("%s\n",str[j]);
    }
    for (int j = 0; j < n; j++)
    {
        //先释放字符串所占的空间
        free(str[j]);
    }
    //最后释放字符串数组占用的空间
    free(str);
    return 0;
}

运行截图:

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值