大佬教程收集整理的这篇文章主要介绍了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之外的任何其他结构,但我不知道哪种结构更好.
谢谢你的帮助!
如果只使用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所说,并行处理文本块可能会提升性能.但要注意创建一个线程是非常昂贵的,所以你应该测量,最低字符数是什么,这证明了线程创建时间的合理性.
以上是大佬教程为你收集整理的c – 给定字符串中每个字符出现多少全部内容,希望文章能够帮你解决c – 给定字符串中每个字符出现多少所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。