Brains


on Algorithm, String Copy Algorithm

String Copy Algorithm

收集了一些字符串复制的算法,这些算法很高效的实现字符串的复制操作。

简介

李明老师的C语言中级课程中,讲解了这一算法,无奈记性不好。。为了以后能时常看到,现记录下来。 函数原型为:

strcpy( char * dest, char * src );

简单方法

核心代码:

while( *dest++ = *src++ );

增量值算法

因为dest和src存储位置相邻,与其每次访问dest和src两个地址,不如只访问src所指存储空间,核心代码如下:


int delta = dest - src;

while(*(char *)(src + delta)++ = *src++);

每次复制4个字节算法

因为在32操作系统下,每次复制32位字符串,会大大地提高效率。核心代码如下:


int * d = (int *)dest;
int * s = (int *)src;

while(1)
{
    if( ! CONTAIN_OF_ZERO_BYTE( *s ) )
    {
        * d = * s;
        d++, s++;
        continue;
    }

    src  = s;
    dest = d;

    while( *dest++ = *src++ );   //最多执行4次
}

上述的那个宏很重要,可以判断一个字节中是否含有‘\0’,因为字符串复制遇到'\0'就可以结束了。

#define TEST(n) ( ( ( n - 1 ) & ( ~n ) ) & 0x80 ) // 为0时返回真

#define CONTAINOFZERO_BYTE(n) \

( ( (n-0x01010101) & (~n) ) & 0x80808080 ) //只要字节中含有0即返回真

comments powered by Disqus

纸上得来终觉浅,绝知此事要躬行~