【c语言】字符串函数的模拟实现(一)

简介: 【c语言】字符串函数的模拟实现(一)

strlen介绍及实现

strlen的作用是求字符串长度。因为字符串的结束标志是'\0',所以strlen统计的是'\0'之前出现的字符的个数。另外我们还需要注意的是strlen函数的返回类型是size_t类型,即无符号整形,那我们看一下下面这一段代码:

#include<stdio.h>
#include<string.h>

int main()
{
     if(strlen("abc") - strlen("abcdef") > 0)
         printf(">\n");
     else
         printf("<=\n");
     return 0;
}

看到这一段代码有人肯定会说3 - 6 < 0屏幕上会打印<=,事实上打印的是>。因为strlen返回的是无符号数,而两个无符号数相减的结果类型也应该是一个size_t类无符号数。所以两数相减的结果-3会被当成一个无符号数,则就大于0了。

综上所述,我们在模拟实现strlen函数时,必须注意以下几点:

  1. 要正确获取到字符串长度的话,那么字符串中必须有'\0'
  2. 要注意strlen的返回类型为size_t

方法一:

#include<stdio.h>

size_t my_strlen(const char* str)
{
     size_t count=0; //计数器,统计字符串长度
     assert(str != NULL);
     while(*str != '\0')
     {
          count++;
          str++;
     }
     return count;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法二:

指针 - 指针----->地址 - 地址 :得到的的是指针和指针之间的元素的个数:

#include<stdio.h>

size_t my_strlen(const char* str)
{
     assert(p != NULL);
     char* cur=str;
     while(*cur != '\0')
     {
          cur++;
     }
     return cur - str;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}

方法三:

递归方式(不创建临时变量)

#include<stdio.h>

size_t my_strlen(const char* str)
{
     if(*str != '\0')
         return 1+my_strlen(str+1);
     else
         return 0;
}
int main()
{
     char arr1[]="abcdef";
     size_t len=my_strlen(arr1);
     return 0;
}


strcpy介绍及实现

strcpy函数就是将一个字符串拷贝到另一个字符串中的函数,在拷贝字符串时也会将字符串的结束标志'\0'也拷贝进去。这里的destination指的是目标字符串,即我们要拷贝字符串进去的字符串。

source指的是源字符串,即需要拷贝的字符串,因为这个源字符是不需要修改的,所以为了避免错误我们就用const修饰。

此函数的返回值是一个char*指针,指向了拷贝后的字符串。

通过上面的介绍我们在模拟实现strcpy函数时需要注意以下几点:

  1. 源字符串必须包含'\0',同时'\0'也会被拷贝到目标空间。
  2. 要保证目标空间足够大,能放下拷贝来的数据
  3. 保证目标空间可以修改
#include<stdio.h>
#include<assert.h> 

void my_strcpy(char* dest,const char* src)
{
    assert(dest && src);
    while(*dest++ = *src++)
    {
        ;
    }
}
int main()
{
    char arr1[]="abcdef";
    char arr2[20]={0};
    my_strcpy(arr1,arr2);
    return 0;
}


目录
相关文章
|
2月前
|
C语言 C++
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
【C语言】解决不同场景字符串问题:巧妙运用字符串函数
|
2月前
|
存储 C语言
【c语言】字符串函数和内存函数
本文介绍了C语言中常用的字符串函数和内存函数,包括`strlen`、`strcpy`、`strcat`、`strcmp`、`strstr`、`strncpy`、`strncat`、`strncmp`、`strtok`、`memcpy`、`memmove`和`memset`等函数的使用方法及模拟实现。文章详细讲解了每个函数的功能、参数、返回值,并提供了具体的代码示例,帮助读者更好地理解和掌握这些函数的应用。
27 0
|
2月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
2月前
|
C语言
C语言常见字符函数和字符串函数精讲
C语言常见字符函数和字符串函数精讲
|
2月前
|
C语言
【C语言】模拟实现深入了解:字符串函数
【C语言】模拟实现深入了解:字符串函数
|
4月前
|
安全 程序员 C语言
【C语言】字符串函数及其模拟实现
【C语言】字符串函数及其模拟实现
|
4月前
|
C语言
【C语言篇】字符和字符串以及内存函数详细介绍与模拟实现(下篇)
perror函数打印完参数部分的字符串后,再打印⼀个冒号和⼀个空格,再打印错误信息。
64 0
|
4月前
|
存储 安全 编译器
【C语言篇】字符和字符串以及内存函数的详细介绍与模拟实现(上篇)
当然可以用scanf和printf输入输出,这里在之前【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)已经讲过了,这里就不再赘述,主要介绍只针对字符的函数.
56 0
|
5月前
|
存储 缓存 C语言
【C语言】字符函数,字符串函数,内存函数
C语言中的字符串函数和内存函数
64 0
【C语言】字符函数,字符串函数,内存函数
|
6月前
|
C语言
【c语言】字符串函数的模拟实现(二)
【c语言】字符串函数的模拟实现(二)
26 1