StringCopy()函数的简化过程

下面是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编程环境下调试通过

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值