计算整数截止值以上的字符数

时间:2016-09-01 01:34:09

标签: c++ string ascii

C++是否有更有效的方式来计算string中的字符数,其整数ASCII值高于某个截止值,而不是评估一个char string在一个循环中整个X = {X_1, X_2, X_3, X_4, X_5, X_6, X_7}; Y = Y;

2 个答案:

答案 0 :(得分:3)

正如drescherjm所说,你想要的是std::count_if。例如,查找ASCII值大于“3”的所有字符:

 std::string s = "12345";
 const char value = '3';
 int count = std::count_if(s.begin(), s.end(), 
     [](const char& a) { return a > value; } );

答案 1 :(得分:1)

你可以并行化(线程)或向量化(SSE向量指令),但是在优化最大化的情况下,一些编译器会为你渲染一个这样的简单检查循环,因此不需要显式向量化。

虽然节省的费用可能很小;对于一个这么简单的任务,要么字符串足够小,以至于优化不会有帮助/重要,或者你很可能是内存带宽限制; CPU可以通过像这样的字符串来快速搅拌。

那就是说,没有理由去打扰。 std::countif会生成简单的代码,因此,除非您(通过分析)证明代码太慢,否则只需使用它:

int num_above_a = std::count_if(v.begin(), v.end(), [](unsigned char c){return c > 'a';})