/*使用指针数组存储若干本英文书名,调用排序函数将其排序后输出*/ #include<stdio.h> #include<string.h> void sort(char ,int n)//排序函数首部 { char ;int i,j,k;//定义变量 for(i=0;i<n-1;i++) {k=i; for(j=i+1;j<n;j++) if()//比较两个书名的大小 k=j; if(k!=i) {temp=name[i]; name[i]=name[k]; name[k]=temp; } } } int main() {int i,m; char *book_name[]={"Visual Basic","Visual C++6.0","C Programing","FORTRAN","C#"}; m=sizeof(book_name)/sizeof(char *); printf("book name:\n"); for(i=0;i<m;i++) printf("%s\n",book_name[i]);//输出每个书名 sort( ,m); printf("\n"); printf("output:\n"); for(i=0;i<m;i++) printf("%s\n",book_name[i]); return 0; }怎么完善这个程序呀?
时间: 2023-12-08 17:07:00 浏览: 71
用指针数组的方法将字符串排序
这段程序中有几处错误,需要进行修正和完善:
1. 排序函数的参数应该是一个字符串指针数组,而不是一个单独的字符变量。
2. 比较函数中应该使用strcmp()函数比较两个字符串的大小。
3. 在主函数中调用排序函数时,应该传入book_name数组的地址,而不是数组的第一个元素。
下面是完善后的程序:
```
#include<stdio.h>
#include<string.h>
void sort(char *name[], int n) // 排序函数
{
int i,j,k;
char *temp;
for(i=0; i<n-1; i++)
{
k = i;
for(j=i+1; j<n; j++)
if(strcmp(name[j], name[k]) < 0) // 比较两个字符串的大小
k = j;
if(k != i)
{
temp = name[i];
name[i] = name[k];
name[k] = temp;
}
}
}
int main()
{
int i,m;
char *book_name[] = {"Visual Basic","Visual C++6.0","C Programing","FORTRAN","C#"};
m = sizeof(book_name) / sizeof(char *);
printf("book name:\n");
for(i=0; i<m; i++)
printf("%s\n", book_name[i]);
sort(book_name, m); // 调用排序函数时,传入book_name数组的地址
printf("\n");
printf("output:\n");
for(i=0; i<m; i++)
printf("%s\n", book_name[i]);
return 0;
}
```
阅读全文