【问题标题】:How to count frequency of word in c [closed]如何计算c中单词的频率[关闭]
【发布时间】:2015-05-29 04:36:53
【问题描述】:

假设我们有一个数组:

你是外星人,他们是人类

那么,如何计算字符串的种类?

输出:

you = 1 word

【问题讨论】:

  • 你有没有想出任何想法/算法?
  • 我想用strcmp() 来做,但是同一个词和不同的词之间有混淆,有什么建议吗?
  • 你试过了吗?那么请出示你的代码。
  • 看看三叉树吧。 cs.princeton.edu/~rs/strings

标签: c algorithm data-structures


【解决方案1】:

假设您已正确完成标记化,您可以将每个单词存储到 char* 向量中,并使用 strcmp 将标记(即 char*)与向量中的每个单词进行比较。

例如)

 token_vector.push_back(token);
 for(auto i = 0; i < token_vector.size(); i++){
    if(strcmp(token, token_vector[i]) == 0) count++;
    else token_vector.push_back(token);
 }

【讨论】:

  • 这是带有 STL 库的 C++,在 c 中不可用。
【解决方案2】:

以下是一些想法:

  1. 将字符串与计数一起存储在 array 中(使用 strcmp)。使用count = 1 添加新字符串,如果字符串已经存在,则将 count 加 1。 (线性搜索)

  2. 将字符串存储在hash table中(通过链表解决冲突)并在遇到相同字符串时增加计数。

  3. 保留 trie 并将计数递增为叶节点

  4. 将字符串存储在 BST(例如 RB tree)中,如果字符串已经存在,则增加计数。

按照链接获取时间/空间复杂性和实现细节,以便就哪种数据结构最适合您的要求做出明智的决定。我害怕添加每个优点和缺点可能会使这篇文章非常广泛。

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 2015-01-07
    • 2019-01-27
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多