编写自己的的MyStrlen/MyStrcpy函数,字符数组和指针

本文介绍了两种字符串操作方法:MyStrlen和MyStrcpy的实现。详细解释了如何使用字符数组和指针来完成字符串长度的计算及复制,并给出了优化建议。

1.MyStrlen的实现

1).字符数组方法:

unsigned int MyStrlen(char str[])
{
    int i;
    unsigned int len=0;
    for(i=0;str[i]!='\0';i++)
    {
        len++;
    }
    return len;
}

实现原理:


2).指针法:

unsigned int MyStrlen(char *pStr)
{
    unsigned int len =0;
    for(;*pStr!='\0';pStr++)
    {
        len++;
    }
    return len;
}

实现原理:


为了对函数进行优化,可以对将函数声明为如下:

unsigned int MyStrlen(const char str[])
unsigned int MyStrlen(const char *pStr)
保护指针变量所指向的变量不被改变。
进一步优化:

unsigned int MyStrlen(const char *pStr)
{
    unsigned int len =0;
    while(*pStr++)
    {
        len++;
    }
    return len;
}

unsigned int MyStrlen(const char *pStr)
{
    const char *start=pStr;
    while(*pStr)
    {
        pStr++;
    }
    return pStr-start;
}

2.字符串复制函数

1).字符数组:

void MyStrcpy(char dstStr[],char srcStr[])
{
    int i=0;
    while(srcStr[i]!='\0')
    {
        dstStr[i]=srcStr[i];
        i++;
    }
    dstStr[i]='\0';
}

2).指针法:

void MyStrcpy(char *dstStr,char *srcStr)
{
    while(*srcStr!='\0')
    {
        *dstStr=*srcStr;
        srcStr++;
        dstStr++;
    }
    *dstStr='\0';
}
原理如下图所示,

进一步优化:

void MyStrcpy(char *dstStr,char *srcStr)
{
    while(*srcStr)
    {
        *dstStr++ = *srcStr++;
    }
    *dstStr='\0';
}
语句*srcStr!='\0'和<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">*srcStr等价</span>
最精简版本:

void MyStrcpy(char *dstStr,const char *srcStr)
{
    while(*dstStr++ = *srcStr++)
    {
        ;
    }
}

最后,关于程序效率的几点建议:

1.不要一味地追求程序的效率,应当在满足正确性、可靠性、健壮性、可读性等质量因素的前提下,设法提高程序的效率;

2.不要追求紧凑的代码,因为紧凑的代码不一定产生高校的机器码;

3.以提高程序的全局效率为主,以提高程序的局部效率为辅;

4.在优化程序的效率时,应该设发找出影响程序效率的瓶颈,而不要在无关紧要的地方修改程序;

5.先优化数据结构和算法,再优化执行代码;

6.时间效率和空间效率对立时,应该分析哪个更重要,适当地做出折衷

来自哈尔滨工业大学MOOC课件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值