题目一
我的思路
1.我们要输入多个单词,而且还要对应长度,考虑用结构体
2.通过对len排序输出对应的单词
踩的坑
1.首先定义结构体后在main函数里面要定义一个数组,来存放这些单词
2.只要跟结构体有关cmp函数都要定义x,y,来指向两个不同的结构体,最后用x->len和y->来进行比较。
我的代码
//上掘金
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
char word[10];
int len;
int idx;
}Word;
int cmp(const void *a,const void* b);
int main()
{
int i;
Word w[20];//我一开始没有这样定义全部报错
for(i=0;;i++){
scanf("%s",w[i].word);
if(strcmp(w[i].word,"#") == 0) break;
w[i].len = strlen(w[i].word);
w[i].idx = i;
}
qsort(w,i,sizeof(Word),cmp);
int j;
for(j=0;j<i;j++){
printf("%s",w[j].word );
if(j<i-1) printf(" ");
}
return 0;
}
int cmp(const void *a,const void* b) //这里的cmp函数一定要好好写的,因为再是直接int之间的比较
{
Word *x = (Word*)a; //x->w[i]
Word *y = (Word*)b; //y->w[j]
if (x->len != y->len ) return x->len - y->len;
return x->idx - y->idx;
}