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