从键盘上输入一串字符串,将其中的单词(单词之间以空格作为分隔符)按长度依次输出。假设每个单词的长度不超过100,单词数目不超过100。
求帮助
struct
{
char str[100];
int length;
};
用结构体保存数据,再用sqort()排序
#include<stdio.h> #include<string.h> #include<stdlib.h> struct Length { int num; int len; }Length[100]; struct Length Temp; char *fun(char ss[][100],char *p,int n,int size) { memccpy(ss[n],p,' ',size); while (*p!=' ') p++; if (*p=='\0') return p; while (*p++==' '); p--; return p; } void Mystrlen(char ss[][100],int n) { Length[n].num=n; Length[n].len=strlen(ss[n])-1; } void change(int n) { int i,j; for (i=0;i<n;i++) for (j=0;j<n-1-i;j++) if (Length[j].len<Length[j+1].len) { Temp=Length[j]; Length[j]=Length[j+1]; Length[j+1]=Temp; } } void print(char ss[][100],int n) { int i=0; for (i=0;i<n;i++) printf("%s\n",ss[Length[i].num]); } int main() { char str[10000]; char ss[100][100]; char *pl=str; int i=0; int count=0; memset(ss,0,sizeof(ss)); gets(str); while (*pl) pl=fun(ss,pl,i++,sizeof(str)); while (count<i) Mystrlen(ss,count++); if (ss[i-1][strlen(ss[i-1])-1]!=' ') Length[i-1].len++; change(i); print(ss,i); return 0; }