帮忙看下这个程序

来源:百度知道 编辑:UC知道 时间:2024/05/29 03:24:16
#include <string.h>
void f(char p[][10], int n )
{
char t[10]; int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0)
{
strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[i],t);
}
}

main()
{
char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
printf("%d\n",strlen(p[0]));
}

我要做的是把数组里的字符串从小到大排序,为什么结果不对呢?

是你疏忽大意造成的毛病,我已经修改好了,修改的地方做了注释
#include <string.h>

void f(char p[][10], int n )
{
char t[10]; int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0)
{
strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[j],t); /*把最后一句中的i改成j就对了*/
}
}

main()
{
int i=0;
char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
for(i=0;i<5;i++)
printf("%s\n",p[i]);

}

如果发生下面的情况你咋办?
a|b|c| | | | | | |
a|a|b|d|f|g| | | |
现在你想把下面的拷贝到上面去,你觉得会发生什么呢?
先清个零吧>_-

//改了一下,可以了,主要有两个地方
#include <string.h>
#include<stdio.h>
void f(char p[][10], int n)
{
char t[10]; int i,j;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++) //你的循环条件没设好
if(strcmp(p[i],p[j])>0)
{
strcpy(t,p[i]); strcpy(p[i],p[j]); strcpy(p[j],