-cfyjbjonn 2019-04-24 22:19 采纳率: 57.1%
浏览 878
已采纳

急求!!!请问我的哪里错了?怎么改?谢谢!!!c语言 给国家的名称按字典顺序排序

题目如下:

请用指针数组编程实现按奥运会参赛国国名,在字典中的顺序对其入场次序进行排序。
假设参赛国不超过150个。

我的代码:
#include
#include
#define MAX_LEN 10
#define N 150
void SortString(char *ptr[], int n);
int main()
{
int i, n;
char *pStr[N];
printf("How many countries?\n");
scanf("%d", &n);
getchar();
printf("Input their names:\n");
for (i = 0; i < n; i++)
{
gets(pStr[i]);
}
SortString(pStr, n);
printf("Sorted results:\n");
for (i = 0; i < n; i++)
{
puts(pStr[i]);
}
return 0;
}

void SortString(char *ptr[], int n)
{
int i, j;
char temp;
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (strcmp(ptr[j] , ptr[i]) < 0 )
{
strcpy(temp , ptr[i]);
strcpy(ptr[j] , ptr[i]);
strcpy(ptr[j] , temp);
}
}
}
}

  • 写回答

3条回答

  • 白色一大坨 2019-04-25 13:20
    关注

    错地方不少都给你注释了,好好看看吧:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX_LEN 10
    #define N 150
    void SortString(char *ptr[], int n);
    int main()
    {
        int i, n;
        char *pStr[N];
        printf("How many countries?\n");
        scanf("%d", &n);
        if (n> N)//输入n值判断
        {
            printf("n  greater than 150\n");
            return 0;
        }
    
        getchar();
        for (i = 0; i < n;i++)//动态分配
        {
            pStr[i] = (char *)malloc(32);
        }
        printf("Input their names:\n");
        for (i = 0; i < n; i++)
        {
            gets(pStr[i]);
        }
        SortString(pStr, n);
        printf("Sorted results:\n");
        for (i = 0; i < n; i++)
        {
            puts(pStr[i]);
        }
        for (i = 0; i < n; i++)//释放资源
        {
            free(pStr[i]);
        }
        return 0;
    }
    
    void SortString(char *ptr[], int n)
    {
        int i, j;
        char temp[32];
        for (i = 0; i < n - 1; i++)
        {
            for (j = i + 1; j < n; j++)
            {
                if (strcmp(ptr[j], ptr[i]) < 0)
                {
                    strcpy(temp, ptr[i]);
                    strcpy(ptr[i], ptr[j]);//序号反了
                    strcpy(ptr[j], temp);
                }
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作