StringCopy()函数的简化过程

原创 2007年10月07日 15:43:00

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

R语言函数的含义与用法,实现过程解读

R的源起 R是S语言的一种实现。S语言是由 AT&T贝尔实验室开发的一种用来进行数据探索、统计分析、作图的解释型语言。最初S语言的实现版本主要是S-PLUS。S-PLUS是一个商业 软件,它基于S语...
  • HHTNAN
  • HHTNAN
  • 2016年12月27日 10:46
  • 232

数据库函数、存储过程详解

  • 2014年11月01日 12:03
  • 440KB
  • 下载

jdbc调用存储过程 函数例子

  • 2012年01月08日 16:06
  • 1.06MB
  • 下载

orcl中的存储过程,自定义函数,触发器

--存储过程的创建  使用存储过程来为student表插入一条数据 create or replace procedure pro_addstudent (sname in student.sn...

java 函数 存储过程

  • 2013年04月05日 22:38
  • 1.33MB
  • 下载

存储过程、函数、触发器和包

  • 2011年09月21日 17:26
  • 459KB
  • 下载

Oracle数据库之PL/SQL过程与函数

Oracle数据库之PL/SQL过程与函数PL/SQL块分为匿名块与命名块,命名块又包含子程序、包和触发器。过程和函数统称为PL/SQL子程序,我们可以将商业逻辑、企业规则写成过程或函数保存到数据库中...
  • zhliro
  • zhliro
  • 2015年06月17日 14:00
  • 1686

C++函数调用过程深入分析

  • 2011年08月11日 20:39
  • 748KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:StringCopy()函数的简化过程
举报原因:
原因补充:

(最多只允许输入30个字)