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
后面的数字显示这个单词出现的次数,前面是按照字母排列
请问各位可以给點提示或者帮忙一下嘛?
2008-08-16 16:47
程序代码:/*******************************************************************************
如果我输入一段英文的文章,然后用什么方法可以将它按照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();
}
2008-08-18 15:23
2008-08-18 15:29
2008-08-18 22:16
2008-08-20 13:17