题主你好,
代码及测试截图如下:
说明: 上图红框处的result可不写, 只是为了看一下分隔结果是否正确
希望可以帮到题主, 欢迎追问
刚用C语言写的,功能实现,但有很多可以优化的地方,自己改吧,不明白的追问:
#include <stdioh>
#include <stringh>
//能统计的最大单词个数,可以自己改
#define MAX_WORD_COUNT 500
//结构体,保存每个单词及对应的个数
typedef struct WordCount
{
char cWord[20];
int iCount;
}T_WordCount;
int CalcEachWord(const char pText);//计算单词个数及输出信息等
void LowerText(char pText);//把单词变成小写形式
void SwapItem(T_WordCount ItemA, T_WordCount ItemB);//交换两个元素
void SortWord(T_WordCount pWordSet);//排序
int main(int argc, char argv[])
{
//测试文本
char pText[] ="Text HAs HAS ONE h-as MOrE Has MORE ha-S BLANk more blank or more oR blank Between wor-ds";
printf("The text is :\n");
printf("----------------------------------\n");
printf("%s\n", pText);
printf("----------------------------------\n");
printf("The top 5 words is :\n");
CalcEachWord(pText); return 0;
}
int CalcEachWord(const char pText)
{
char cTmp[20] = {0};
int i = 0;
char pTmp = cTmp;
int iFlag = 0;
T_WordCount tWordSet[MAX_WORD_COUNT];
memset(tWordSet, 0, sizeof(tWordSet));
while (pText != '\0')
{
if ((pText >= 'A' && pText <= 'Z') || (pText >= 'a' && pText <= 'z'))
{
pTmp = pText;
pTmp++;
}
else if (pText == '-')
{
++pText;
continue;
}
else
{
if (strlen(cTmp) > 0)
{
LowerText(cTmp);
iFlag = 0;
for (i = 0; i < MAX_WORD_COUNT; ++i)
{
if (strlen(tWordSet[i]cWord) > 0)
{
if (strcmp(tWordSet[i]cWord, cTmp) == 0)
{
iFlag = 1;
tWordSet[i]iCount++;
break;
}
}
else
{
strcpy(tWordSet[i]cWord, cTmp);
tWordSet[i]iCount = 1;
iFlag = 1;
break;
}
}
if (!iFlag)
{
printf("No more space to save word\n");
}
}
memset(cTmp, 0, 20);
pTmp = cTmp;
}
++pText;
}
//排序 SortWord(tWordSet);
for (i = 0; i < 5; ++i)
{
if (strlen(tWordSet[i]cWord) > 0)
{
printf("%s:%d\n",tWordSet[i]cWord,tWordSet[i]iCount);
}
}
return 0;
}
void LowerText(char pText)
{
char pTmp = pText;
while (pTmp != '\0')
{
if ((pTmp >= 'A' && pTmp <= 'Z'))
{
pTmp += 32 ;
}
pTmp++; }
}
void SwapItem(T_WordCount ItemA, T_WordCount ItemB)
{
T_WordCount Tmp;
memset(&Tmp, 0, sizeof(T_WordCount));
strcpy(TmpcWord, ItemA->cWord);
TmpiCount = ItemA->iCount;
strcpy(ItemA->cWord, ItemB->cWord); ItemA->iCount = ItemB->iCount;
strcpy(ItemB->cWord, TmpcWord); ItemB->iCount = TmpiCount;
}
//冒泡排序算法
void SortWord(T_WordCount pWordSet){
int i,j;
for (j = 0; j < MAX_WORD_COUNT - 1; j++)
{
for (i = 0; i < MAX_WORD_COUNT - 1 - j; i++)
{
if (pWordSet[i]iCount < pWordSet[i+1]iCount)
{
SwapItem(&pWordSet[i], &pWordSet[i+1]);
}
}
}
}
测试结果截图:
对w进行循环与字符串a比对
比如"is"与a进行比对,找到a中所有有a地方然后判断该位置是否为一个单词是则在对应b中增加数字
如果代码不想自己写的话
我可以有偿代劳
ASCII码表 32 为 blank 空格。
方括号中应填入:p++;
while(p==32)
[ p++; ]
其意思是:排除掉句子刚开始可能有前空格的情况。
以上就是关于python怎么统计一句英语的单词数量并输出全部的内容,包括:python怎么统计一句英语的单词数量并输出、编写一个程序。功能是读入一篇英文文章,统计该文章中每个单词的出现次数,并输出出现次数最多的前5个单词、c语言问题 统计单词的词频①编写函数void count(char a[],char w[][10等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)