1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 【C语言程序设计】统计一个句子中各个单词出现的次数

【C语言程序设计】统计一个句子中各个单词出现的次数

时间:2023-03-09 07:47:23

相关推荐

【C语言程序设计】统计一个句子中各个单词出现的次数

【C语言程序设计】统计一个句子中各个单词出现的次数

文章目录

【C语言程序设计】统计一个句子中各个单词出现的次数题目代码部分运行结果补充和总结

题目

编一程序,它读入一个句子,统计在句子中出现的各个单词出现的次数,并将结果输出。

例如:

如果输入的一个句子为how do you do.

则输出结果为:

[how]=>1

[do]=>2

[you]=>1

代码部分

#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>//利用链表的方式储存每个单词和出现的次数。#define MaxSize 81typedef struct LNode{char data[81];//data储存单词int count;//count储存次数struct LNode *next;//next指向下一个结构体}LNode, *LinkList;void insert(LinkList L,char *word);struct LNode* check(LinkList L, char *word);void reverse_L(LinkList L);int main(){//头节点HLstruct LNode HL = {"0",0,NULL};//指针L指向头节点,L用于之后对链表的操作LinkList L = &HL;//flag用于获得返回的重复出现单词结构体的地址以方便修改count出现次数LinkList flag = NULL;//ch用于获得每次从键盘输入的字符char ch;//i用于数组存储int i = 0;//word数组用于存储每次获得的单词char word[MaxSize];//while循环实现“插入”新单词,或者让旧单词的count+1while((ch = getchar())!='\n'){if(ch == ','){continue;}else if(ch==' '||ch=='.'){word[i++] = '\0';//如果出现过该单词flag为该单词结构体的地址//否则返回NULLflag = check(L,word);if(!flag){//没有出现过这个单词,在链表中插入新单词insert(L,word);}else{//出现过这个单词,count+1flag->count++;}//重新获得单词,i置为0,flag置为NULLi = 0;flag = NULL;}else if((ch>='a' && ch<='z')||(ch >= 'A' && ch<='Z' )){//把字母拼接成单词word[i++] = ch;}}reverse_L(L);return 0;}//链表的插入操作,建议选用头插法,这里用了尾插法void insert(LinkList L,char *word){LNode *insert_p = L;LNode *p = (LNode*)malloc(sizeof(struct LNode));p->next = NULL;p->count = 1;strcpy(p->data,word);for(;insert_p->next;insert_p = insert_p->next);insert_p->next = p;return;}//check为flag提供该单词结构体的数组,没有则返回NULLstruct LNode* check(LinkList L, char *word){LNode *p = L->next;while(p){if(!strcmp(word,p->data)){return p;}else{p = p->next;}}return NULL;}//遍历单链表,打印单词和次数void reverse_L(LinkList L){LNode *p = L->next;while(p){printf("[%s]==>%d \n", p->data,p->count);p = p->next;}return;}

运行结果

补充和总结

本题利用链表,可以减少对数组进行操作,可以降低程序的时间复杂。同时,代码中还存在这一些缺陷,比如如果末尾没有句号的时候会无法判断最后一个单词是否出现,希望读者在使用的时候加以改进。

如果有更好的方法欢迎讨论~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。