前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模拟实现不受限制的字符串函数--C语言版

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

作者头像
用户9996207
发布2023-01-13 14:26:07
4190
发布2023-01-13 14:26:07
举报
文章被收录于专栏:学习之旅111学习之旅111

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

1.strlen

strlen函数就是计算字符串的长度的,它会一直读取到\0,它的返回值就是在字符串中'\0' 前面出现的字符个数(不包括\0)。 而了解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上,其中源字符串必须要以\0结束,并且目标字符串必须要有足够大的空间

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

3.strcat

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

代码语言: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.找到目标字符串的\0
    while (*dest)
    {
        dest++;
    }
   //2.接着追加过去(包括\0)(就是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 == '\0')//*q也为'\0'
        {
            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>q\n");
    else if (ret < 0)
        printf("p<q\n");
    else
        printf("p==q\n");
    return 0;
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.strlen
  • 2.stccpy
  • 3.strcat
  • 4.strcmp
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档