|
发表于 2022-4-28 11:48:18
|
显示全部楼层
本帖最后由 jackz007 于 2022-4-28 11:50 编辑
看来直接用 strcmp() 是有问题的。
代码已经修改,请你再测
- #include <stdio.h>
- #include <string.h>
- int comp(char s1[] , char s2[])
- {
- int i , m , r , n1 , n2 ;
- n1 = strlen(s1) ;
- n2 = strlen(s2) ;
- m = (n1 < n2) ? n1 : n2 ;
- for(i = 0 ; i < m && s1[i] == s2[i] ; i ++) ;
- if(i == m) {
- if(n1 == n2) r = 0 ;
- else if(n1 < n2) r = comp(s1 , & s2[i]) ;
- else r = comp(& s1[i] , s2) ;
- } else {
- if(s1[i] > s2[i]) r = 1 ;
- else r = -1 ;
- }
- return r ;
- }
- int main(void)
- {
- int c , d[100] , e , i , j , k , n ;
- char s[100][24] , r[2004] ;
- scanf("%d" , & n) ;
- fflush(stdin) ;
- for(i = 0 ; i < n ; i ++) {
- fgets(s[i] , 24 , stdin) ;
- s[i][strlen(s[i]) - 1] = '\0' ;
- d[i] = i ;
- }
- for(i = 0 ; i < n - 1 ; i ++) {
- for(k = i , j = i + 1 ; j < n ; j ++) if(comp(s[d[j]] , s[d[k]]) > 0) k = j ;
- e = d[i] ;
- d[i] = d[k] ;
- d[k] = e ;
- }
- for(c = i = 0 ; i < n ; i ++) for(j = 0 ; s[d[i]][j] ; j ++) r[c ++] = s[d[i]][j] ;
- r[c] = '\0' ;
- printf("%s\n" , r) ;
- }
复制代码
另外,你的答案也是错的
编译、运行实况:
- D:\[00.Exercise]\[C]>g++ -o x x.c
- D:\[00.Exercise]\[C]>x
- 4
- 7
- 442
- 44
- 3
- 7444423
- D:\[00.Exercise]\[C]>
复制代码
是的,正确答案应该是 7444423 而不是 7443442。 |
|