在比较多个字符串并排序时, 字符串等长和不等长情况有什么区别?
这个是谭浩强的习题,写了两个程序,可惜看不懂等长时:
程序代码:
#include <stdio.h> #include <string.h> void sort(char s[5][6]) { int i,j; char *p,t[10]; p=t; for (i=0;i<4;i++) { for (j=0;j<4-i;j++) { if (strcmp(s[j],s[j+1])>0) { strcpy(p,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],p); } } } } int main(int argc, char *argv[]) { int i; char str[5][6]; printf("enter 10strings:\n"); for (i=0;i<5;i++) { scanf("%s",str[i]); } sort(str); printf("now:\n"); for (i=0;i<5;i++) { printf("%s\n",str[i]); } return 0; }
不等长时:
程序代码:
#include <stdio.h> #include <string.h> void sort(char *p[]) { int i,j; char *t; for (i=0;i<4;i++) { for (j=0;j<4-i;j++) { if (strcmp(*(p+j),*(p+j+1))>0) { t=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=t; } } } } int main(int argc, char *argv[]) { int i; char *p[5],str[5][20]; for (i=0;i<5;i++) { p[i]=str[i]; } printf("enter 10strings:\n"); for (i=0;i<5;i++) { scanf("%s",p[i]); } sort(p); printf("now:\n"); for (i=0;i<5;i++) { printf("%s\n",p[i]); } return 0; }
想知道分别处理等长和不等长的原理是什么?
谢谢!