You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储strlen()结果用于循环条件与直接检查空字符的性能对比

关于循环中strlen()存储结果与直接检查空字符的性能疑问

我只找到两篇相关主题的帖子:

  • 一篇指出循环里每次调用strlen()会导致性能大幅下降,但没讨论把strlen()结果存入变量后用于循环条件的情况;
  • 另一篇提到strlen()经过长期优化后速度已经很快,但我还是疑惑——把它的结果存到变量里再用于循环条件,为什么能带来显著的性能提升?

经提示后我了解到,另一篇帖子其实是在对比strlen()和手动遍历求字符串长度的差异,但我真正想搞清楚的是:循环条件使用存储的strlen()结果,和直接检查空字符(比如*magazine或*ransomNote)这两种方式,到底存在多大的速度差异?

补充背景:我是在解决赎金信问题时产生的这个疑问,该问题要求判断能否用magazine中的字符构造ransomNote(每个字符仅可使用一次)。我写出了两种实现方案:

方案一

bool canConstruct(char * ransomNote, char * magazine){
    int magCharCount[26] = {0};
    for (int i = 0, magLen = strlen(magazine); i < magLen; ++i) ++magCharCount[magazine[i] - 'a']; 
    for (int i = 0, rNotelen = strlen(ransomNote); i < rNotelen; ++i) if (--magCharCount[ransomNote[i] - 'a'] < 0) return false; 
    return true;
}

方案二

bool canConstruct(char * ransomNote, char * magazine){
    int magCharCount[26] = {0};
    for (int i = 0; *magazine; ++magazine) ++magCharCount[*magazine - 'a'];
    for (int i = 0; *ransomNote; ++ransomNote) if (--magCharCount[*ransomNote - 'a'] < 0) return false;
    return true;
}

目前多数计算机科学课程里,教授和其他主流解决方案更倾向于第二种实现写法。

内容的提问来源于stack exchange,提问作者anonymousBeaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:54:33