dat*_*ili 14 c string-length strlen
我已经读过使用strlen比这样的测试更昂贵:
我们有一个x100个字符的字符串.
我觉得
for (int i = 0; i < strlen(x); i++)
Run Code Online (Sandbox Code Playgroud)
比这段代码贵:
for (int i = 0; x[i] != '\0'; i++)
Run Code Online (Sandbox Code Playgroud)
这是真的吗?也许第二个代码在某些情况下不起作用,所以最好使用第一个代码吗?
下面会更好吗?
for (char *tempptr = x; *tempptr != '\0'; tempptr++)
Run Code Online (Sandbox Code Playgroud)
Mat*_*ewD 27
for (int i=0;i<strlen(x);i++)
Run Code Online (Sandbox Code Playgroud)
此代码调用strlen(x)每次迭代.因此,如果x长度为100,strlen(x)将被调用100次.这非常昂贵.此外,每次都以与for循环相同的方式strlen(x)迭代x.这使得O(n ^ 2)复杂度.
for (int i=0;x[i]!='\0';i++)
Run Code Online (Sandbox Code Playgroud)
此代码不调用任何函数,因此比前一个示例快得多.由于它仅循环遍历循环一次,因此它是O(n)复杂度.
是的,你的第二个可能无法 100% 地工作,但它会稍微安静一些。这是因为使用 strlen() 时,每次都必须调用该方法。更好的方法就像这样
int strLength = strlen(x);
for (int i = 0; i < strLength; i++)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。