C语言排列问题
本人是C语言新手,现在做作业遇到一个问题,请教各位大大.如果我输入一段英文的文章,然后用什么方法可以将它按照ABCD...这样的顺序排列出来呢?
比如我输入
I love you, baby. You are my forever.
然后会显示
are 1
baby 1
forever 1
I 1
love 1
my 1
you 2
后面的数字显示这个单词出现的次数,前面是按照字母排列
请问各位可以给點提示或者帮忙一下嘛?
/******************************************************************************* 如果我输入一段英文的文章,然后用什么方法可以将它按照ABCD...这样的顺序排列出来呢? 比如我输入 I love you, baby. You are my forever. 然后会显示 are 1 baby 1 forever 1 I 1 love 1 my 1 you 2 后面的数字显示这个单词出现的次数,前面是按照字母排列 ******************************************************************************* 根据题意,作出下面很糟糕代码,谨作参考。 ################################################################################ PS:现在测试中遇到了点问题,就是在输入连续标点符号夹带空格的时候,会 出现单词截取不准的现象,请高手解决。 *******************************************************************************/ #include<stdio.h> #include<string.h> #define N 1000 #define Y 20 struct ST { char a[Y]; int i; } st[N],s; int sz(char *a,int n) /*截取单词函数,形参为字符串和字符串长度*/ { int i,j,k,m1=0,m2; for(i=0;i<n;i++) if(a[i]<65||(a[i]>90&&a[i]<97)||a[i]>122) a[i]='\0'; /*当遇到非字母的情况下,把字符转换为休止符*/ for(i=0;i<n;i++) for(j=i+1;j<=n;j++) { if(a[j]=='\0'&&a[j+1]!='\0'||j==n) /*当出现休止符而下一个是字母或者字符串结束*/ { for(k=i,m2=0;k<j;k++,m2++) st[m1].a[m2]=a[k]; /*把单词赋值给结构体*/ i=k+1; st[m1].a[m2]='\0'; /*加上休止符*/ m1++; } } return m1; /* 返回结构体数组的长度 */ } int px(int n) /*结构体排序函数,形参为结构体数组长度*/ { int i,j,k,m=0; for(i=0;i<n;i++) st[i].i=1; /*将结构体中记数器赋值为1*/ for(i=0;i<n;i++) for(j=i+1;j<n;j++) { if(strcmp(st[i].a,st[j].a)>0) /*比较结构体中字符串,如果是逆序的,就将它转换*/ { s=st[i]; st[i]=st[j]; st[j]=s; } if(strcmp(st[i].a,st[j].a)==0) /*当结构体中出现相同字符串时,把记数器加1,并将相同的结构 体删除*/ { st[i].i+=1; for(k=j;k<n;k++) st[k]=st[k+1]; n--; } } return n; } int main(void) { int i,n,m,k; char a[Y]; printf("请输入一段文章:\n"); gets(a); n=strlen(a); m=sz(a,n); k=px(m); for(i=0;i<k;i++) printf("%20s%5d\n",st[i].a,st[i].i); getch(); }