加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 词频统计

发布时间:2020-12-16 06:58:21 所属栏目:百科 来源:网络整理
导读:在面试前,我遇到了这样的问题: 给定一个由单个空格分隔的单词组成的字符串,按照它们出现在字符串中的次数按降序打印出单词. 例如,输入字符串“a b b”将生成以下输出: b : 2a : 1 首先,我要说输入字符串是由单字母单词还是多字母单词组成还不是很清楚.如果
在面试前,我遇到了这样的问题:

给定一个由单个空格分隔的单词组成的字符串,按照它们出现在字符串中的次数按降序打印出单词.

例如,输入字符串“a b b”将生成以下输出:

b : 2
a : 1

首先,我要说输入字符串是由单字母单词还是多字母单词组成还不是很清楚.如果是前者,那可能很简单.

这是我的想法:

int c[26] = {0};
char *pIn = strIn;

while (*pIn != 0 && *pIn != ' ')
{
    ++c[*pIn];
    ++pIn;
}

/* how to sort the array c[26] and remember the original index? */

我可以得到输入字符串中每个单字母单词的频率统计数据,我可以对它进行排序(使用QuickSort或其他).但是在对count数组进行排序之后,如何获得与计数相关联的单字母单词,以便我可以稍后将它们打印出来?

如果输入字符串由多个字母组成,我打算使用map< const char *,int>跟踪频率.但同样,如何对地图的键值对进行排序?

问题在于C或C,欢迎提出任何建议.

谢谢!

解决方法

我会使用std :: map< std :: string,int>存储单词及其计数.然后我会用这个来得到这些话:

while(std::cin >> word) {
    // increment map's count for that word
}

最后,你只需要弄清楚如何按频率顺序打印它们,我会把它作为练习留给你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读