#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void sort(char *pc,int m);
int main(void)
{
int i=0;
int n;
int x;
char *pcolor;
printf("输入n个字符串:\n");
scanf("%d",&n);
if((pcolor=(char *)malloc(n*sizeof(char)))==NULL)
{
printf("不能分配内存!\n");
exit(1);
}
for(i=0;i<n;i++)
{
scanf("%s",pcolor+i);
}
sort(pcolor,n);
for(i=0;i<n;i++)
{
printf("%s\n",pcolor+i);
}
free(pcolor);
return 0;
}
void sort(char *pc,int m)
{
int j=0,k=0;
char *temp;
for(j=1;j<m;j++)
{
for(k=0;k<m-j;k++)
{
if(strcmp(pc+k,pc+k+1)>0)
{
temp=pc+k;
pc=pc+1;
pc=temp-k-1;
}
}
}
}
结果是这样的,不知道错在哪了,求指点
你好,你的程序出现的问题在你给每个字符串赋值的版块,你以为pcolor+i可以到下一个新的字符串,其实它表达的是你上一个字符串去掉第一个字母,所以你每一次的输入是在第一次输入的基础上的重叠覆盖!为了具体了解,你可以先写一个字符串char pcolor=“red”,然后输出pcolor+1,你会发现输出的是ed,也就是pcolor[1]和pcolor[2]。那么如何更正呢?我建议使用结构去包含字符串。具体可以关注私信我,我们一起交流讨论。