c语言关于多个数组的排序问题

#include<stdio.h>
#include<string.h>
int main()
{
int i,j;
char *temp;
char *p[6];
char a[6][6];
printf("请输入你想比较的字符串");
for (i=0;i<6;i++)
{
p[i]=a[i];
}
for (i=0;i<6;i++)
{
scanf ("%s",p[i]);
}
for (i=0;i<6;i++)
{
for (j=0;j<6-i;j++)
{
if (strcmp(*p[i],*p[i+1]>0))
{
temp=*p[i];
*p[i]=*p[i+1];
*p[i+1]=temp;
}
}
}
for (i=0;i<6;i++)
{
printf("%s\n",p[i]);
}
return 0;
}
我的不对,请问错在那里,如何改正??
最新回答
落花ぴ满天飞

2024-11-08 00:00:53

//1你没有理解冒泡排序原理,应该和内层循环个元素交换,所以把变量i+1替换为变量j

//2strcmp函数不会用,应该传指针,因为只有这样才能比较两个字符串。

#include<stdio.h>

#include<string.h>

int main()



 int i,j; 

 char *temp; char *p[6];

 char a[6][6]; 

 printf("请输入你想比较的字符串");

 for (i=0;i<6;i++)

 { 

  p[i]=a[i]; 

 } 

 for (i=0;i<6;i++)

 {  scanf ("%s",p[i]); 

 } for (i=0;i<6;i++)

 { 

  for (j=i;j<6;j++) 

  {   

   if (strcmp(p[i],p[j])>0)  

   {   

    temp=p[i];    

    p[i]=p[j];   

    p[j]=temp;  

   } 

  }

 }      

 for (i=0;i<6;i++) 

 {   

  printf("%s\n",p[i]); 

 }  

 return 0;

}
追问
第一个冒泡的是我错了 但是我看到就是strcmp可以这样用啊,我试过,有这样用的
追答
http://msdn.microsoft.com/zh-cn/library/e0z9k731.aspx

MSDN有关于strcmp函数有详细解释,概括来讲 就是需要const char *类型的参数,所以要传递指针。最初您定义的是char *p[6]; 所以要传p[i],要是传*p[i],那么就相当于传值了。
追问
你讲的很好,谢谢了!
空自忆

2024-11-08 00:00:23

char *temp;

交换的话还是定义个数组作为中间交换吧

char temp[6];

________________________________

for (i=0;i<6;i++)
{
    for (j=0;j<6-i;j++)
    {
        if (strcmp(*p[i],*p[i+1]>0))
        {
            temp=*p[i];
            *p[i]=*p[i+1];
            *p[i+1]=temp;
        }
    }
}

这里就写的一塌糊涂了

_________________________________

for (i=0;i<6;i++)
{
for (j=0;j<6-1-i;j++)
{
if (strcmp(p[j],p[j+1])>0)
{
strcpy(temp,p[j]);
strcpy(p[j],p[j+1]);
strcpy(p[j+1],temp);
}
}
}
念如丝缕

2024-11-08 00:00:10

if (strcmp(*p[i],*p[i+1]>0))
{
temp=*p[i];
*p[i]=*p[i+1];
*p[i+1]=temp;
}
这一段把i换成j试试看,我没试,不过感觉是这里的问题;
希望能帮到你。