代码看起来没有问题,但是有一些可以优化的地方:

  1. 使用 fgets 代替 gets,避免缓冲区溢出的风险。

  2. 使用 scanf("%s",str[i]) 代替 gets(str[i]),避免安全问题。

  3. 可以使用 qsort 函数进行排序,代码更简洁。

优化后的代码如下:

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

#define N 202

int cmp(const void *a, const void *b) {
    return strcmp(*(char**)a, *(char**)b);
}

int greater(char *s1,char *s2) {
    int len1,len2;
    len1=strlen(s1);
    len2=strlen(s2);

    if(len1>len2) return 1;
    else if(len1<len2) return -1;
    else {
        for(int i=0;i<len1;i++) {
            if(s1[i]>s2[i]) return 1;
            else if(s1[i]<s2[i]) return -1;
        }
        return 0;
    }
}

int main() {
    int n,j;
    char str[N][N],*p;
    scanf("%d ",&n);
    p=(char *)malloc(sizeof(char)*N);
    for(int i=0;i<n;i++){
        fgets(str[i], N, stdin);
        strcpy(p,str[i]);
        for(j=0;p[j]!='\0';j++){
            if(p[j]!='0') break;
            if(p[j+1]=='\0') break;
        }
        p=&p[j];
        strcpy(str[i],p);
    }

    qsort(str, n, sizeof(str[0]), cmp);

    for(int i=0;i<n;i++){
        printf("%s", str[i]);
    }
    return 0;
}
``
#includestdioh#includestringh#define N 202int greaterchar s1char s2 int len1len2; len1=strlens1; len2=strlens2; iflen1len2 return 1; else iflen1len2 return -1; else forint i=

原文地址: https://www.cveoy.top/t/topic/fDjB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录