用二维数组编程,将若干字符串按字母顺序由小到大排序后输出。以下的程序哪里错了??

#include "stdio.h"
#include <string.h>
#define M 9//字符串最大长度,即二维数组的最大列数
#define N 5//最大行数
int main(void)
{
inti,j;
chartemp[M];
charstr[N][M]={"Pascal","Basic","Fortran","Java","VisualC"};
printf("befoesorted:\n");

for(i=0;i<N;i++)
{
puts(str[i]);
}
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
{
if(str[j]<str[i])
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
}
printf("aftersorted:\n");
for(i=0;i<N;i++)
{
puts(str[i]);
}
return0;
}

#include "stdio.h"

#include <string.h>

#define M 9

#define N 5

int main(void)

{

       int i,j;

       char temp[M];

       char str[N][M]={"Pascal","Basic","Fortran","Java","Visual C"};

       printf("befoe sorted:\n");


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

       {

              puts(str[i]);

       }

       for(i=0;i<N-1;i++)

       {

              for(j=i+1;j<N;j++)

              {

    if(strcmp(str[j],str[i])<0)                /*改了*/

                     {

                     strcpy(temp,str[i]);                /*改了*/

                     strcpy(str[i],str[j]);

                     strcpy(str[j],temp);

                     }

              }

       }

       printf("after sorted:\n");

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

       {

              puts(str[i]);

       }

       return 0;

}

追问

请问为什么要改成那部分?表示初学者不懂

追答

在C语言中字符串的比较要用strcmp,返回-1,0,1分别表示小于、等于、大于;
字符串的复制要用strcpy

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-03
1、j的范围是M不是N
2、两个字符串长度可能不等,需要在比较的时候做长度保护,防止数组访问越界
3、temp类型是字符数组,在程序中应该是字符型
相似回答