#includestdioh#includestringh#define N 202int greaterchar s1char s2 int len1len2; len1=strlens1; len2=strlens2; iflen1len2 return 1; else iflen1len2 return -1; else forint i=
代码看起来没有问题,但是有一些可以优化的地方:
-
使用
fgets代替gets,避免缓冲区溢出的风险。 -
使用
scanf("%s",str[i])代替gets(str[i]),避免安全问题。 -
可以使用
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;
}
``
原文地址: https://www.cveoy.top/t/topic/fDjB 著作权归作者所有。请勿转载和采集!