求助,字符串排序问题
在做一个题目,要求对字符串进行各种排序,见下列源代码:
程序代码:#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函数好几遍,才能最终得到正确结果。我已经考虑了两三天,查不到问题所在,请各位大虾帮忙看看。






