关闭

StringCopy()函数的简化过程

325人阅读 评论(0) 收藏 举报

下面是StringCopy()函数的最原始版本,基于标准库的strcpy(),该函数用了数组符号,较为容易理解

char *StringCopy( char dest[ ], char sour[ ] )
{
    int i;
    for(i=0; sour[i]!='/0'; i++)
    {
        dest[i] = sour[i];
    }
    dest[i] = '/0';
   
    return dest;
}

下面是StringCopy()函数的另外一个版本,用指针代替数组,完成了同样的功能。

char *StringCopy( char *dest, char *sour )
{
    int i;
    for(i=0; sour[i]!='/0'; i++)
    {
        dest[i] = sour[i];
    }
    dest[i] = '/0';
   
    return dest;

将程序部分也改用指针来写

char *StringCopy( char *dest, char *sour )
{
    int i;
    for(i=0; *(sour+i)!='/0'; i++)
    {
        *(dest+i) = *(sour+i);
    }
    *(dest+i) = '/0';
   
    return dest;
}

如果对该函数用指针参数,就不再需要指针变量i进行指针递增了,源程序如下

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    for(; *sour!='/0'; sour++, dest++)
    {
        *dest = *sour;
    }
    *dest = '/0';
    dest = temp;
    return dest;
}

下面,我们可以让for循环的判断更加有效,这个版本依然要检查空字符,但是它是通过检查字符本身来判断。因为空字符等于0,当遇到空字符时判断条件为假。

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    for(; *sour; sour++, dest++)
    {
        *dest = *sour;
    }
    *dest = '/0';
    dest = temp;
    return dest;
}

用一个赋值语句就可以让该函数变的更加高效,赋值语句就等于一个值,这个值就是被赋予的值。据此可以让循环变的更加简洁。

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    for(; *dest = *sour; sour++, dest++)
    {
    }
    dest = temp;
    return dest;
}

当我们采用while循环时,我们发现可以让该函数更加简洁:

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    while(*dest++ = *sour++)
    {
    }
    return temp;
}

当然,我们注意到该while循环体为空,因此完全可以用一个分号取代该循环体以得到我们的StringCopy()的最终简化版:

char *StringCopy( char *dest, char *sour )
{
    char *temp = dest; //保存最后要返回的dest的首地址
    while(*dest++ = *sour++);
    return temp;
}

这个函数短小精悍,但是他与最原始的函数完成的是同样的事情。

 

以上例程来自于《软件开发:编程与设计(C语言版)》P345-349,代码均在DEVC4.9.9.2编程环境下调试通过

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:530次
    • 积分:24
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档