c - 在循环条件中使用 strlen() 是否比仅检查空字符慢?

标签 c strlen string-length

我读到使用 strlen 比这样的测试更昂贵:

我们有一个长度为 100 个字符的字符串 x

我认为

for (int i = 0; i < strlen(x); i++)

比这段代码更昂贵:

for (int i = 0; x[i] != '\0'; i++)

这是真的吗?也许第二个代码在某些情况下不起作用,那么使用第一个更好吗?

下面的会不会更好一些?

for (char *tempptr = x; *tempptr != '\0'; tempptr++)

最佳答案

for (int i=0;i<strlen(x);i++)

此代码在每次迭代时调用 strlen(x)。因此,如果 x 的长度为 100,则 strlen(x) 将被调用 100 次。这是非常昂贵的。此外,strlen(x) 也每次都以与 for 循环相同的方式迭代 x。这使其复杂度为 O(n^2)。

for (int i=0;x[i]!='\0';i++)

此代码不调用任何函数,因此会比前面的示例快得多。由于它只迭代一次循环,所以复杂度为 O(n)。

关于c - 在循环条件中使用 strlen() 是否比仅检查空字符慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3388029/

相关文章:

c - 如何让 VC++ 的调试器在出现异常时中断?

c++ - 访问结构有问题

c - C中的简单垂直直方图

c - const char* 的 strlen 是否经过优化?

c - SHA1 OpenSSL 段错误

PHP:strlen 返回字符长度而不是字节长度

Gnuplot,我如何获得一个值的长度?

java - 如果我分割这个字符串,为什么我的 string.length 是 0 ?

MySQL - 如何按字符串长度选择数据

c - 查找字符串长度时出现段错误