//标题
//单词排序
//
//描述
//定义一个二维字符数组str[10][20],行号表示单词序号,列号表示单词最大长度,
//输入一个正整数N(N≤10),表示单词数,使用函数wd_sort()完成单词的排序,按字母顺序从小到大排列单词,使用指针完成地址传递,
//主函数完成数组输入和输出。
//输入说明
//输入一个二维字符数组str和一个正整数N,行号表示单词序号,列号表示单词最大长度。
//
//输出说明
//格式输出:单词之间空一行。
//
//输入样例
//3
//word fish egg
//输出样例
//egg
//fish
//word
//
//提示
//使用指针作形参,实现地址传递。
//数组定义后初始化。
//使用strcmp()、strcpy()和strlen()函数,头文件string.h。
之前的代码
#include<stdio.h>
#include<string.h>
int main()
{
void wd_sort(char (*p)[],int );
char str[10][20];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&str[i]);
}
wd_sort(str,n);
for(i=0;i<n;i++)
{
printf("%s\n",str[i]);
}
return 0;
}
void wd_sort(char (*p)[],int n)
{
int j,i;
char temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strmp((*p)[j],(*p)[j+1])>0)
{
strcpy(temp,*(p+j));
strcpy((*p)[j],(*p)[j+1]);
strcpy((*p)[j+1],temp);
}
}
}
出现了很多错误,包括类型变化中数据丢失。
一开始陷入到二维数组的使用中无法自拔,最后还是感谢大佬给我的tips
#include<stdio.h>
#include<string.h>
int main()
{
void wd_sort(char (*p)[],int );
char str[10][20];
int n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",&str[i]);
}
wd_sort(str,n);
for(i=0;i<n;i++)
{
printf("%s\n",str[i]);
}
return 0;
}
void wd_sort(char (*p)[20],int n)
{
int j,i;
char temp[20];
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strcmp(*(p+j),*(p+j+1))>0)
{
strcpy(temp,*(p+j));
strcpy(*(p+j),*(p+j+1));
strcpy(*(p+j+1),temp);
}
}
}