C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 给定字符串中每个字符出现多少大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要计算给定字符串中每个字符出现的次数.我需要在C或C上做,我可以使用任何库.问题是我不是C/C++开发人员,所以我不确定我的代码是否是最佳的.我想获得最佳性能算法,这是这个问题的主要原因.

我目前正在使用以下代码

using namespace std;
...

char* text;        // some text,may be very long
int text_length;   // I kNow this value,if it can Help

map<char,int> table;
map<char,int>::iterator it;

for(int i = 0; c = text[i]; i++) {
    it = table.find(c);
    if (it2 == table.end()) {
        table[c] = 1;
    } else {
        table[c]++;
    }
}

我可以使用除std :: map之外的任何其他结构,但我不知道哪种结构更好.

谢谢你的帮助!

解决方法

你正在使用 bucket sort正确地做.没有更快(非并行)的算法来计算有限宇宙中的元素(例如字符).

如果只使用ASCII字符,则可以使用简单的数组int表[256]来避免C容器的开销.

使用Duff’s device(现在某cpu实际上速度较慢):

int table[256];
memset(table,sizeof(tablE));
int iterations = (text_length+7) / 8;
switch(count % 8){
    case 0:      do {    table[ *(text++) ]++;
    case 7:              table[ *(text++) ]++;
    case 6:              table[ *(text++) ]++;
    case 5:              table[ *(text++) ]++;
    case 4:              table[ *(text++) ]++;
    case 3:              table[ *(text++) ]++;
    case 2:              table[ *(text++) ]++;
    case 1:              table[ *(text++) ]++;
                 } while(--iterations > 0);
}

更新:正如MRAB所说,并行处理文本块可能会提升性能.但要注意创建一个线程是非常昂贵的,所以你应该测量,最低字符数是什么,这证明了线程创建时间的合理性.

@H_262_34@

大佬总结

以上是大佬教程为你收集整理的c – 给定字符串中每个字符出现多少全部内容,希望文章能够帮你解决c – 给定字符串中每个字符出现多少所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。