萌新求问,怎么用c语言求出一篇英语文章里重复单词的数量
c4droid吧
全部回复
仅看楼主
level 11
萌新求问,怎么用c语言求出一篇英语文章里重复单词的数量
2017年10月11日 06点10分 1
level 11
[乖][乖][乖]
2017年10月11日 06点10分 2
level 6
可以用哈希表
2017年10月11日 06点10分 3
level 6
还有个傻办法[乖],用链表和树配合做
2017年10月11日 06点10分 4
level 6
如图.这是一个if if you的,他的节点定义如下
typedef struct node{
char data;//这是他字母的ASCII值
struct node *next; //这是它下一个节点的,因为开头可能不一样,遵循规律ASCII值比较大小排列,如果你不考虑大小写.则全部转换成小写再插入
struct node *child; //单词的子节点的,比如说if中的f就是i的子节点
}NODE;
2017年10月11日 06点10分 5
level 6
然后,就是分离字符串的过程,一开始不是inword=false(单词内)状态,如果当前单词符合az-AZ,且inword=false,则进入某个单词,离开单词则反过来,然后开始读取,比如说读if
,发现没有根节点,先新建一个节点i,然后继续读,发现了f,i没有f子节点,新建f插入到i的子节点,,然后发现单词结束了,然后f节点+1,意思是i-f计数为1,然后又回到这棵树的根(节点i),第二次if,沿着原来的路.找到了f节点,然后单词要结束了,然后f节点计数+1,然后到you的时候,先找根节点.大招y>i(对比ASCII),然后.再对比i的,next,发现没有节点了然后新建节点y插入到i后面,然后第二次,还没出单词呢,现在还是指向节点y,o和y的子节点比较,y没子节点,新建o插进去,然后.u也是同理,然后u是单词结束,然后节点u计数+1,[乖]然后你要找词频(重复的),遍历它,把计数大于2的打印路径出来就行了
2017年10月11日 06点10分 6
level 6
[升起]一口气又水了6点经验,简直水破天际.好像字数够了吧[勉强]
2017年10月11日 06点10分 7
level 6
至于怎么读,你可以采用深度优先搜索(非递归的方法可以用一个栈)先竖着读,然后再横着读,比如
左边是栈底,右边是栈顶:
i
if(f的计数为2符合要求,然后从栈底的data打印到栈顶就是if,f没有next节点了,把f出栈)
然后检查栈顶的i,有next
把i出栈,把i的next入栈
y
查看栈顶元素有没有Child,发现有o,把o入栈
yo
链表o,检查o的count是否符合要求,o.count为0,不打印
检查o是否有子节点.发现u,把u入栈
you
检查u是否符合要求,不符合要求,不打印
检查u是否有Child,木有,
检查u是否有next,木有,
出栈
yo
检查o有没有next,木有,把o出栈
y
检查y是否有next,木有,出栈
检查栈是否为空,空的,退出
2017年10月11日 07点10分 8
不是链表o,是检查o,打错字[怒]
2017年10月11日 07点10分
level 6
方法是一样的,但是同一级的(就是a->b->c->d)用链表不太好,效率太低,可以采用自平衡二叉树代替链表,好处就是,一旦你这棵树建立起来后,对于搜索某个单词比较容易,如果单词量很大的,可以考虑下树来做,如果单词量不大的,可以用链表(对于同一层)
2017年10月11日 07点10分 9
1