我正在研究c编程语言,并希望按升序对字符串进行排序。这是C代码:
/* string sorted in ascending order */
#include <stdio.h>
#include <string.h>
void sort(char *name[],int n);
int main()
{
char *name[]={"Zai","Demo","CS","Apple"};
int i,n=4;
sort(name,n); // call sort function
for(i=0;i<n;i++)
{
printf("%s\n",name[i]);
}
}
void sort(char *name[],int n)
{
char *temp;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n;j++)
{
if(strcmp(name[j],name[j+1])>0)
{
temp=name[j];
name[j]=name[j+1];
name[j+1]=temp;
}
}
}
}
我使用以下命令:
gcc -o string_sort string_sort.c
./string_sort
但是它不起作用。这是错误的消息:
我该怎么办?
答案 0 :(得分:0)
for(j=0;j<n;j++)
必须为for(j=0;j<n-1;j++)
,因为否则name[j+1];
将超出范围。通过此更改,它可以工作。另外,j=0;
不是必需的。
答案 1 :(得分:0)
for(j=0;j<n;j++)
这条线越过数组的边界。应该是:
for(j=0;j<n-1;j++)
就像在循环中,name[j+1];
比j
少1时,n
将越界。
答案 2 :(得分:0)
#include <stdio.h>
#include <string.h>
void sort(char *name[],int n);
int main()
{
char *name[]={"Zai","Demo","CS","Apple"};
int i,n=4;
sort(name,n); // call sort function
for(i=0;i<n;i++)
{
printf("%s\n",name[i]);
}
}
void sort(char *name[],int n)
{
char *temp;
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++) //change at this line
{
if(strcmp(name[j],name[j+1])>0)
{
temp=name[j];
name[j]=name[j+1];
name[j+1]=temp;
}
}
}
}