求助,字符串排序问题
在做一个题目,要求对字符串进行各种排序,见下列源代码:程序代码:
#include "stdafx.h" #include "string.h" char menu(void); void a(char (*pp)[81],int n); void b(char * pp[10],int n); void c(char * pp[10],int n); void d(char * pp[10],int n); int main(void) { char stt[10][81]; char * pst[10]; int i=0; char cm; //input puts("Enter up to 10 sentences\n"); printf("%2d: ",i+1); while(i<10 && gets(stt[i])) { pst[i]=stt[i]; i++; printf("%2d: ",i+1); } printf("\nReceive %d sentences\n",i); //menu while ((cm=menu())!='q') switch(cm) { case 'a':a(stt,i);break; case 'b':b(pst,i);break; case 'c':c(pst,i);break; case 'd':d(pst,i);break; default:puts("Error!"); } puts("Finished!"); //end while(getchar()!='\n'); getchar(); return 0; } char menu(void) { char ch; puts("\n\nHere is the MENU\n"); puts("==============================================="); puts("a. print as input b. print as sort"); puts("c. print as length d. print as first length"); puts("q. quit"); puts("==============================================="); printf("\nInput your command here: "); while(((ch=getchar())<'a' || ch>'d') && ch!='q') { while(getchar()!='\n') continue; printf("Wrong command, input again: "); } while(getchar()!='\n') continue; puts("\n\n"); return ch; } void a(char (*pp)[81],int n)//按输入顺序输出,没有问题 { int m; puts("print as input\n"); for (m=0;m<n;m++) { printf("%2d: ",m+1); puts(pp[m]); } puts("Done!\n"); } void b(char * pp[10],int n)//按字母表顺序输出,没有问题 { int m; int i,j; char * temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strcmp(pp[i],pp[j])>0) { temp=pp[i]; pp[i]=pp[j]; pp[j]=temp; } puts("print as sort\n"); for (m=0;m<n;m++) { printf("%2d: ",m+1); puts(pp[m]); } puts("Done!\n"); } void c(char * pp[10],int n)//按长度输出,没有问题 { int m; int i,j; char * temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(strlen(pp[i])>strlen(pp[j])) { temp=pp[i]; pp[i]=pp[j]; pp[j]=temp; } puts("print as length\n"); for (m=0;m<n;m++) { printf("%2d: ",m+1); puts(pp[m]); } puts("Done!\n"); } void d(char * pp[10],int n)//按第一个单词的长度输出,有问题 { int m; int i,j; int word[10]={0}; char * temp; char * tpp[10]; for(m=0;m<n;m++) tpp[m]=pp[m]; for(m=0;m<n;m++) while(*tpp[m] && *tpp[m]!=' ') { (word[m])++; tpp[m]++; } for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(word[i]>word[j]) { temp=pp[i]; pp[i]=pp[j]; pp[j]=temp; } puts("print as first length\n"); for (m=0;m<n;m++) { printf("%2d: ",m+1); printf("%d ",word[m]);//我特意在这里打印第一个单词的长度,看不出所以然。 puts(pp[m]); } puts("Done!\n"); }其中a、b、c三个函数没有问题。d函数则很奇怪,也不是说不能得到正确结果,但有的时候需要接连运行d函数好几遍,才能最终得到正确结果。
我已经考虑了两三天,查不到问题所在,请各位大虾帮忙看看。