您的位置:首页 > 编程语言 > C语言/C++

用c语言实现求一个字符串长度的函数

2016-06-18 16:46 477 查看


用c语言实现求一个字符串长度的函数:

分析:c语言中并没有限制字符串长度,程序必须扫描完整个字符串才能知道字符串的长度
根据题目要求写出函数声明: int My_Strlen(const char *ps);


int My_Strlen(const char *ps)//不用中间变量 用递归实现

{

    if((ps == NULL)||(*ps == '\0'))

    {

        return 0;  

    } 

    else

    {

        return 1+My_Strlen(++ps);

    }

}

int My_Strlen(const char *ps)//常规实现 声明一个整形变量

{

    int len = 0;

    if(ps == NULL)

    {

        return 0;

    } 

    for(;*ps++ != '\0';)

    {

        len++; 

    }

   

    return 0;

   

}

分析:

在字符串中通常可以利用最后一个结束符’\0’,但此处参数为const,只读,那么我们不能打他的主意。
函数运行过程中不占用内存基本不可能,除非都使用了寄存器。“不使用中间变量”只是说程序员不能显示的申请内存而已,即不能有局部变量或者动态内存申请。
如果函数自动申请栈内存或者使用寄存器存储变量,或者使用立即数寻址即常量,那么就相当于“不使用中间变量”。
从函数原型看,返回值为int,那么在函数内部必定需要一个地方存储这个值,要么是常数要么是寄存器。
长度不为1时不能一次就求出来,说明必须有递归调用,这样递归时函数会自动申请栈内存,这样就相当于程序员“不使用中间变量”了。
中间返回的值通过寄存器自动保存,最后一次返回时拷贝到int中去。
C/C++中也有临时对象的概念,都是程序在运行过程中由编译器在栈中自动申请的对象,对程序员不可见,也相当于“不使用中间变量”

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: