代码如下:
#include<stdio.h>
#include<string.h>
void sort(char p[])
{
int i,j;
char temp;
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(strcmp(p[i],p[j])>0)
{
temp=p[i];p[i]=p[j];p[j]=temp;
}
}
int main()
{
int i;
char *p[10],str[10][10];
for(i=0;i<10;i++)
printf("Please enter 10 string:\n");
for(i=0;i<10;i++)
scanf("%s",p[i]);
sort(p);
printf("Now, the sequence is:\n");
for(i=0;i<10;i++)
printf("%5s",p[i]);
return 0;
}
在主函数的第二行,str[10][10]是干什么的,没了它,为什么在运行时只能输入5个字符串,还不能排序?在它后面的第一个for(i=0;i<10;i++)为什么同样不能省略?
修改处见注释,供参考:
#include<stdio.h>
#include<string.h>
void sort(char* p[])//修改
{
int i,j;
char* temp; //修改
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(strcmp(p[i],p[j])>0)
{
temp=p[i];p[i]=p[j];p[j]=temp;
}
}
int main()
{
int i;
char *p[10],str[10][10];
//for(i=0;i<10;i++) 修改
printf("Please enter 10 string:\n");
for(i=0;i<10;i++) { //修改
scanf("%s",str[i]); //修改
p[i] = str[i]; //修改
} //修改
sort(p);
printf("Now, the sequence is:\n");
for(i=0;i<10;i++)
printf("%5s",p[i]);
return 0;
}
str这个,从头到尾都没用过,应该是没用的东西
这个程序是读入,排序后就直接输出,所以不需要储存数据,str就是用来储存数据的
第一个for循环控制的就是输入输出的次数.