成语大全网 - 汉语词典 - c语言编程实现统计字符串中英文单词的个数。并按出现频次升序排序显示每个单词出现的次数

c语言编程实现统计字符串中英文单词的个数。并按出现频次升序排序显示每个单词出现的次数

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

/*定义结构体word内存放单词和个数*/

typedef struct

{

char *str1[20];

int strC;

}WordAndCnt;

//定义total函数计算总的单词个数

void total(char* str,WordAndCnt* wac)

{

//int sum=0,i;

int i,j;

wac->strC=0;

for(i=0,j=0;str[i]!='#' && str[i]/*避免忘记输#的尴尬*/;i++) //你程序的输入是以字符'#'结尾的吧?不管了,你写的是这样,我就默认'#'结尾

{

if((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z'))//确定起始字符的位置

{

if(i==0 || !((str[i-1]>='a' && str[i-1]<='z') || (str[i-1]>='A' && str[i-1]<='Z')))

{

j=i;

}

//j++;

}

if(i>0 && !((str[i]>='a' && str[i]<='z') || (str[i]>='A' && str[i]<='Z')) &&

((str[i-1]>='a' && str[i-1]<='z') || (str[i-1]>='A' && str[i-1]<='Z')))//结束字母的位置

{

wac->str1[wac->strC]=(char*)calloc(i-j+1,sizeof(char));//分配空间 并初始化

strncpy(wac->str1[wac->strC],str+j,i-j);

wac->strC++;

}

}

if(i!=j)//把最后一个字符串也拷贝到str1里

{

wac->str1[wac->strC]=(char*)calloc(i-j+1,sizeof(char));//分配空间 并初始化

strncpy(wac->str1[wac->strC],str+j,i-j);

wac->strC++;

}

printf("total=%d\n",wac->strC);

//return(sum);

}

void main()

{

char str[1000];

WordAndCnt wac;

memset(str,0,1000);

printf("输入一串英文:\n");

gets(str);

total(str,&wac);

printf("\n\n");

if(wac.strC>0)

{

for(int i=0;i<wac.strC;i++)

{

printf("输入的第%d个单词是:%s\n",i+1,wac.str1[i]);

}

}

}