结构体排序

21 阅读1分钟

题目一

image.png

我的思路

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;
}