我读到使用 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/