模拟实现不受限制的字符串函数--C语言版

2023-01-13 14:26:07 浏览数 (1)

C语言中提供了许多十分好用的库函数,一旦我们掌握了它们,我们使用C语言写代码就会变得更加得心应手。

1.strlen

strlen函数就是计算字符串的长度的,它会一直读取到,它的返回值就是在字符串中'' 前面出现的字符个数(不包括)。 而了解strlen的实现原理也会让我们更好的理解代码

代码语言:javascript复制
//模拟实现strlen
// 计算器版本
//#include<stdio.h>
//#include<assert.h>
//int my_strlen(const char *str)
//{
//	assert(str);
//	int count = 0;
//	while (*str   != 0)
//	{
//		count  ;
//	}
//	return count;
//}
//
//int main()
//{
//	char arr[] = {"abcdef"};
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}

当然,strlen绝对不止这一种写法,如果各位想看,可以移步strlen的三种模拟实现方法

2.stccpy

strcpy是将字符串b复制到字符串a上,其中源字符串必须要以结束,并且目标字符串必须要有足够大的空间

代码语言:javascript复制
#include<stdio.h>
#include<string.h>
void mine_strcpy(char* dest, char* sou)
{
    while (*dest   = *sou  )//当sou将传给dest时,while里面的值是0,自动结束了循环---既copy了
                              //又使循环停止
    {
        ;
    }
}
int main()
{
    char arr1[] = "aaaaaaaaaaaaaa";
    char arr2[] = "hello";
    mine_strcpy(arr1, arr2);
    printf("%sn", arr1);
    return 0;
}

3.strcat

strcat是字符串追加函数,目标字符串必须要有足够大的空间去容纳原字符串,并且原字符串必须要以结尾 strcat的模拟实现:首先需要找到目标字符串的位置,接着要在的位置,将要复制的字符串拷贝过去即可。

代码语言:javascript复制
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
    assert(dest &amp;&amp; src);
    char* ret = dest;
   //1.找到目标字符串的
    while (*dest)
    {
        dest  ;
    }
   //2.接着追加过去(包括)(就是strcpy的思路)
    while (*dest   = *src  )
    {
        ;
    }
    return ret;
}
int main()
{
    char arr1[50] = {"stay foolish,"};
    char arr2[20] = {"stay hungry"};
    //my_strcat(arr1, arr2);
    printf("%s", my_strcat(arr1, arr2));//链式访问
    return 0;
}

4.strcmp

strcmp就是比较两个字符串的大小 strcmp的实现思路就是一个一个字符的进行比较,知道找到不一样的或者全部一样的为止

代码语言:javascript复制
//模拟实现strcmp
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* p,const char* q)
{
    assert(p &amp;&amp; q);
    while (*p == *q)
    {
        if (*p == '')//*q也为''
        {
            return 0;
        }
        p  ;
        q  ;
    }
  //if (*p > *q)
    //	return 1;
    //else
        //return -1;
    return  *p - *q;
}
int main()
{
    char p[] = "abcd";
    char q[] = "abe";
    int ret = my_strcmp(p, q);
    if (ret > 0)
        printf("p>qn");
    else if (ret < 0)
        printf("p<qn");
    else
        printf("p==qn");
    return 0;
}

以上介绍的都是长度不受限制等函数

0 人点赞