问个简单c语言问题?

来源:百度知道 编辑:UC知道 时间:2024/05/06 06:03:30
#include<stdio.h>
#include<string.h>
void main()
{
int i,j;
char str[5][34],*temp;
for(i=0;i<5;i++)
{
gets(str[i]);
}
for(i=0;i<4;i++)

for(j=0;j<4;j++)
if(strcmp(str[i],str[i+1])>0)
{
temp=str[i];
str[i]=str[i+1];
str[i+1]=temp;
}
for(i=0;i<5;i++)
{ printf("\n");
puts(str[i]);
}
}将五个字符串排序,错在哪里?

用我的答案,两个地方有错,一是排序算法不对,正确如下,二是交换时要用字符串拷贝,不能用指针赋值,这是不允许的。
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
void main()
{
int i,j;
char str[5][34],*temp;
for(i=0;i<5;i++)
{
gets(str[i]);
}

for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(strcmp(str[i],str[j])>0)
{
temp= (char *)malloc(strlen(str[i]));
strcpy(temp, str[i]);
strcpy(str[i], str[j]);
strcpy(str[j], temp);
}
for(i=0;i<5;i++)
{
printf("\n");
puts(str[i]);
}
}

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

for(j=0;j<4;j++) /*应改为for(j=i+1;j<5;j++)*/
if(strcmp(str[i],str[i+1])>0)/*str[i+1]改为str[j]下面的也要改*/
{
temp=str[i];
str[i]=str[i+1];
str[i+1]=temp;
}

错误很明显,在这里temp=str[i]; str[i]=str[i+1]; str[i+1]=temp;c语言规定,字符变量之间是不能赋值的,只能用函数strcpy(st1,st2);函数,将st2复制到st1中

#include<stdi