Is using strlen() in the loop condition slower tha

2019-01-20 07:26发布

I have read that use of strlen is more expensive than such testing like this:

We have a string x 100 characters long.

I think that

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

is more expensive than this code:

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

Is it true? Maybe the second code will not work in some situation so is it better to use the first?

Will it be better with the below?

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

8条回答
Melony?
2楼-- · 2019-01-20 08:23
for (int i=0;i<strlen(x);i++)

This code is calling strlen(x) every iteration. So if x is length 100, strlen(x) will be called 100 times. This is very expensive. Also, strlen(x) is also iterating over x every time in the same way that your for loop does. This makes it O(n^2) complexity.

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

This code calls no functions, so will be much quicker than the previous example. Since it iterates through the loop only once, it is O(n) complexity.

查看更多
孤傲高冷的网名
3楼-- · 2019-01-20 08:23

I can suppose that in first variant you find strlen each iteration, while in second variant you don't do that.
Try this to check:

int a = strlen(x); 
for (int i = 0; i < a; i++) {...}
查看更多
登录 后发表回答