问题
从写Strlen函数,计算一个字符串的长度。如果不考虑效率,最简单的方法就是一个字符一个字符往后移,遇到字符尾就结束,字符尾巴是一'0/'结束。
strlen(constant char *str){
size_t length = 0;
while(*str++){
return lenth++;
}
}
我想到的算法如下,不知道是否是否最好的
问题分析,上面算法在循环时是递增式的循环,一次增加一个位置,非常慢,我采用翻倍式循环,循环位置为
0,1,2,4,8……2^n,样很快就找到字符串不可能达到的长度,推出循环时2^n必是空,但2^(n-1)必不是空,
所以该字符串的长度必然在2^(n-1),2^n之间;再之后就是定位字符串的尾巴的具体位置,这里有采用快速查找法,学者尾巴位置,得到结果在根2^(n-1)一加就得到最终结果。
这样整个算法都是采用成倍方式循环,比递增循环快得多。
这个算法有问题,晕
不记得在C中指针可以乱指,这个点本来是结束位(全0),但它的下一个指针位完全说不定是什么
这个问题的正确解决方法还是,递增检查,但每次递增4为,采用32为二进制进行相与操作,在定位,可以考虑寄存器
在其他时候还是我的算法快,:-)