zcmerlin 2016-09-04 11:25 采纳率: 70%
浏览 1656

C语言,字符串排序问题

n个字符串按ASCII排序(n< 10),每个子串不超过20个字符

我用的是二维数组,每行表示一个子串,但是不能对第一个子串赋值,第二个可以
图片说明
图片说明

下面是我的代码,是哪里错了呢

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

int cmp(char *str1, char *str2);                  //字符串比较
void swap(char *element1, char *element2);        //字符串交换

int main()
{
    int num, i, m, n;
    char strs[9][21];

    scanf_s("%d", &num);             //输入字符串个数

    for (i = 0; i < num; i++)
    {
        gets(strs[i]);               //依次输入字符串
    }

    for (i = 0; i < num; i++)        //从第一个子串开始遍历
    {
        for (m = 0; m < strlen(i) - 1; m++)        //冒泡排序
            for (n = 0; n < strlen(i) - 1 - m; n++)
            {
                if (cmp(strs[n], strs[n + 1]))      //字符串比较
                {
                    swap(strs[m], strs[m + 1]);       //字符串交换
                    break;                            //跳出第一层循环
                }
            }
    }

    for (i = 0; i < n; i++)
        printf("%s\n", strs[i]);          //依次打印出每个子串

    system("pause");
    return 0;
}

int cmp(char *str1, char *str2)
{
    int i;

    for (i = 0; i < strlen(str1) || i < strlen(str2); i++)
    {
        if (str1[i] < str2[i])
            return 1;
        else if (str1[i] > str2[i])
            return 0;
    }
}

void swap(char *element1, char *element2)
{
    char tmp[21];

    tmp[21] = element1;
    element1 = element2;
    element2 = tmp[21];
}
  • 写回答

3条回答 默认 最新

  • AlbertS 博客专家认证 2016-09-04 12:58
    关注

    你的程序中并没有用到函数cmp,整个逻辑对不对了

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办