模拟实现库函数strlen

x33g5p2x  于2021-11-22 转载在 其他  
字(1.6k)|赞(0)|评价(0)|浏览(421)

很多小伙伴可能会认为这也太容易了吧,这不是有手就行吗于是遍拿起电脑咔咔咔咔

写出了这样一段代码:

#include<stdio.h>

int main()

{

    char str[]="no gains";

    int count=0;

    while(*str++ !='\0')

 

    {

            count++;

    }

    printf("总共有%d个字符",count);

}

当小伙伴点击编译器运行的时候,编译器毫不留情的报错。这是小伙伴有点怀疑自己学了个假的c语言。其实这个错误的原因很简单:数组名是常量不能被修改

知道了这个原因之后稍作就行了:

#include<stdio.h>
int main()
{
    char str[]="no gains";
    int count=0;
    int i=0;
    while(*(str+i) !='\0')
    {
             i++;
            count++;
    }
    printf("总共有%d个字符",count);
}

  还有的小伙伴咔咔咔咔拿起电脑写出了这样一段代码并且自认为很完美:

int strlen(char*str)
{
    int count =0;
    while(*str!='\0')
    {
        count ++;
    }
    return count;
}

咔咔咔就结束了看起来挺完美的,其实这个代有很多的漏洞。

其一他并没有考虑到str为空指针的情况,其二就是我们只是要求字符串的长度并不会把他给修改在这里并没有把他给保护起来。

下面是我实现的代码

#include<assert.h>
int my_strlen(const char*str)//const 修饰保护str指向的字符串的内容不能被修改
{
    assert(str!=NULL);//断言防止str为空指针
    int count=0;
    while(*str!='\0')
    {
        count++;
    }
    return count;
}

其实实现这个函数不止这一种方法在以后的面试中可能面试官会出这样一道题:不使用临时变量模拟实现strlen这个函数可能有点小懵,其实也很简单。运用的思想主要是递归下面让我们来看如何不使用临时变量实现strlen这个函数

#include<assert.h>
#include<stdio.h>
int my_strlen(const char*str)//const 修饰保护str指向的字符串的内容不能被修改
{
    assert(str!=NULL);//指针断言防止str为空指针
    if(*str!='\0')
    {
      return 1+my_strlen(++str);
    }
    else//如果为空字符串直接返回0
    {
        return 0;
    }
}
    int main()
    {
        char arr[]="fnnnc";
        int len=my_strlen(arr);
        printf("%d",len);//打印字符串长度
    }

运用递归的方法就可以把他完美的解决了

其实实现这个函数还有一个方法那就是指针减指针让我们来看看这种解决方法吧

#include<assert.h>
#include<stdio.h>
int my_strlen(const char*str)//const 修饰保护str指向的字符串的内容不能被修改
{
    assert(str!=NULL);//断言防止str为空指针
    char*start=str;
    char*end=str;
    while(*end!='\0')
    {
        end++;//指针向后移动
    }
    return end-start;
}
    int main()
    {
        char arr[]="fnnnc";
        int len=my_strlen(arr);
        printf("%d",len);//打印字符串长度
    }

这样我们就再一次实现这个函数通过这希望对各位小伙伴有帮助通过这也告让我们明白在学习的过程中要虚心要扎实。喜欢的小伙伴点个赞!

相关文章

微信公众号

最新文章

更多