模拟实现str函数

本文介绍了在C语言中模拟实现字符串处理函数,包括strlen、strcpy、strcat、strcmp和memcpy。通过详细讲解每个函数的思想和实现方法,阐述了如何在没有内置字符串类型的情况下处理字符串操作。

    字符串是一个重要的数据类型,但是C语言并没有显式的字符串数据类型,因为字符串以字符常量的形式存储在字符数组之中。接下来我将要模拟实现处理字符串的库函数:strlen,syrcpy,strcat,strstr,strcmp,memcpy。
1、strlen返回一个int型的数据,是一个测试字符串长度的函数。
这是自己模拟实现strlen的功能
思想:字符串都有结束标志\0,只要遍历这个字符串,知道遇到\0结束,就能轻松的获得字符串的长度了

#include <stdio.h>
#include <stdlib.h>
int my_strlen(const char* str)
{
    if (*str == '\0')
    {
        return 0;
    }
    else
    {
        int ret = (1 + my_strlen(str + 1));
        return r`
t;
    }
}int main()
{
    const char* string = "hello";
    printf("长度为:%d",my_strlen(string));
    system("pause")`

    return 0;
}

实现strlen函数的方法有很多,在这里我就只粘了一种递归实现的方法。
2、模拟实现strcpy,表示字符串复制函数,但是我觉得这个还是少用为好,因为

以下是对`str`函数族中几个常见函数实现方法的介绍: ### strcmp函数实现 `strcmp`函数用于比较两个字符串,根据ASCII码值判断大小关系。其实现思路是逐个字符比较两个字符串,直到遇到不同字符或者字符串结束符`'\0'`。 ```c #include <stdio.h> int strcmp(char *str1, char *str2) { while (*str1 && *str2 && *str1 == *str2) { str1++; str2++; } return *str1 - *str2; } int main() { char str1[] = "abc"; char str2[] = "abd"; int result = strcmp(str1, str2); if (result > 0) { printf("str1 > str2\n"); } else if (result < 0) { printf("str1 < str2\n"); } else { printf("str1 == str2\n"); } return 0; } ``` ### strlen函数实现 `strlen`函数用于计算字符串的长度,即字符串中字符的个数(不包括字符串结束符`'\0'`)。其实现思路是遍历字符串,直到遇到字符串结束符`'\0'`,统计字符个数。 ```c #include <stdio.h> int strlen(char *a) { int n = 0; while (a[n] != '\0') { n++; } return n; } int main() { char a[] = "hello world"; int len = strlen(a); printf("%d\n", len); return 0; } ``` ### strtok函数实现(简单模拟) `strtok`函数用于将字符串按指定分隔符分割成多个子字符串。这里给出一个简单的模拟实现,原`strtok`函数使用静态变量存储查找位置,这里简化处理。 ```c #include <stdio.h> #include <string.h> char *strtok_custom(char *str, const char *delim) { static char *next_token = NULL; if (str != NULL) { next_token = str; } if (next_token == NULL || *next_token == '\0') { return NULL; } char *start = next_token; while (*next_token != '\0') { for (const char *d = delim; *d != '\0'; d++) { if (*next_token == *d) { *next_token = '\0'; next_token++; return start; } } next_token++; } next_token = NULL; return start; } int main() { char str[] = "hello,world,how,are,you"; char *token = strtok_custom(str, ","); while (token != NULL) { printf("%s\n", token); token = strtok_custom(NULL, ","); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值