(c语言)字符串函数简单理解和模拟

文章介绍了C语言中几个重要的字符串处理函数:strlen用于计算字符串长度,不包括结束符;strcpy用于字符串拷贝,要求目标空间足够且可变;strcat实现字符串追加,同样需要目标空间足够;strcmp则进行字符串比较,返回基于ASCII值的结果。
摘要由CSDN通过智能技术生成
  • strlen函数(计算字符串长度)

size_t my_strlen(const char* str)
  1. 字符串以‘\0’作为结束标志,strlen函数返回的是字符串中'\0'前面出现的字符个数(不包含'\0')

  1. 参数指向的字符串必须要以'\0'结束

  1. 注意函数的返回值为size_t,是无符号的

函数模拟

#include<stdio.h>
#include<assert.h>

size_t my_strlen(const char* str)//const修饰char* str,使其不可改
{
    int count = 0;
    assert(str != NULL);//断言
    while (*str != '\0')
    {
        count++;
        str++;
    }
    return count;
}

int main()
{
    int len = my_strlen("abcdef");
    printf("%d", len);
    return 0;
}
  • strcpy函数(字符串拷贝)

char* strcpy(cahr* destination,const char* souree );
  1. 源字符必须以'\0'结束

  1. 会将源字符串中的'\0'拷贝到目标空间

  1. 目标空间必须足够大,以确保能存放源字符串

  1. 目标空间必须可变

strcpy模拟

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* sou)
{
    assert(dest != NULL);//与assert(dest)效果一样
    assert(sou != NULL);
    char* ret = dest;
    while (*dest++=*sou++)
    {
        ;
    }
    return ret;
}



int main()
{
    char arr1[] = "asdfghj";
    char arr2[] = "abcdef";
    my_strcpy(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}
  • strcat函数(字符串追加)

char* strcat(char* destination,const char* source)
  1. 源字符串必须以'\0'结束

  1. 目标空间必须要足够大,能容纳源字符的内容

  1. 目标空间必须可修改

strcat模拟

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, char* sro)
{
    assert(dest);
    assert(sro);
    char* ret = dest;
    while (*dest != '\0')//找到最后不为0的字符
    {
        dest++;
    }
    while (*dest++ = *sro++)//修改字符
    {
        ;
    }
    return ret;
}



int main()
{
    char arr1[30] = "hallo";
    char arr2[] = "world";
    my_strcat(arr1, arr2);
    printf("%s\n", arr1);
    return 0;
}
  • strcmp函数(字符串比较)

int strsmp(const char* str1,const char* str2)

(注意:不是比较字符串长度,比较的是字符ascll大小)

  1. str1 > str2,返回大于0的数字

  1. str1 = str2,返回等于0的数字

  1. str1 < str2,返回小于0的数字

strcmp函数模拟

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
    assert(str1);
    assert(str2);
    while (*str1++ == *str2++)
    {
        if (*str1 == '\0')
        {
            return 0;
        }
    }
    if (*str1 > *str2)
    {
        return 1;
    }
    else
        return -1;
}

int main()
{
    char p1[] = "abcdef";
    char p2[] = "abcdef";
    int ret = my_strcmp(p1, p2);
    printf("%d \n", ret);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值