字符函数和字符串函数1(strlen、strcpy、strcmp、strncpy)

strlen函数

strlen函数的实现

size_t strlen ( const char * str );

第一种方法:

#include<stdio.h>
#include<assert.h>
int my_strlen(const char* arr)
{
    int count=0;
    assert(arr);//assert(arr!=NULL)
    while(*arr!='\0')//while(arr)
    {
        count++;
        arr++;
    }
    return count;
}
int main()
{
    char arr[ ]="abcdefg";
    int ret=0;
    ret=my_strlen(arr);
    printf("%d\n",ret);
}//编译结果:7

第二种方法(递归)

#include<stdio.h>
int my_strlen(char* arr)
{
    if(*arr=='\0')
    {
        return 0;
    }
    else
    {
        return (1+my_strlen(arr+1));
    }
}
int main()
{
    char arr[]="abcdefgggggg";
    int ret=0;
    ret=my_strlen(arr);
    printf("%d\n",ret);
}

注意实现

1、 字符串以'\0' 作为结束标志,strlen函数返回的是在字符串中'\0' 前面出现的字符个数(不包
含'\0' )。

2、参数指向的字符串必须要以'\0' 结束。

3、注意函数的返回值为size_t,是无符号的( 易错)

#include <stdio.h>
#include<string.h>
int main()
{
    const char*str1 = "abcdef";
    const char*str2 = "bbb";
    if(strlen(str2)-strlen(str1)>0)
    {
        printf("hehe\n");
    }
    else
    {
        printf("haha\n");
    }
    return 0;
}//编译结果:hehe    返回值是-3,但是是返回无符号数,因此-3要变成正数

strcpy函数

strcpy函数的实现

char* strcpy(char * destination, const char * source );

#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char* arr1,const char* arr2)
{
    char* ret=NULL;
    assert(arr1 && arr2);
    ret=arr1;
    while(*arr1++=*arr2++)
    {
        ;
    }
    return ret;
}
int main()
{
    char arr1[]="abcdefg";
    char arr2[]="world";
    printf("%s\n",my_strcpy(arr1,arr2));
    return 0;
}//编译结果:world

注意事项

1、源字符串必须以'\0'结束。

2、会将源字符串中的'\0' 拷贝到目标空间。

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

4、目标空间必须可变。

strcmp函数

strcmp函数的实现

int strcmp ( const char * str1, const char * str2 );

#include<stdio.h>
#include<assert.h>
#include<string.h>
int my_strcmp(const char* arr1,const char* arr2)
{
    assert(arr1&&arr2);
    while(*arr1==*arr2)
    {
        
        if(*arr2=='\0')
        {
            return 0;//相等
        }
        arr1++;
        arr2++;
    }
  /*if(*arr1>*arr2)
    {
        return 1;
    }
    else
    {
        return -1;
    }*/ //适合C语言编译器
    return (*arr1-*arr2);//适用于大部分编译器
}
int main()
{
    char arr1[]="abc";
    char arr2[]="abcdfge";
    int ret1=0;
    int ret2=0;
    ret1=strcmp(arr1,arr2);
    ret2=my_strcmp(arr1,arr2);
    printf("%d\n",ret1);
    printf("%d\n",ret2);
}//编译结果:-1

注意事项

1、第一个字符串大于第二个字符串,则返回大于0的数字
2、第一个字符串等于第二个字符串,则返回0
3、第一个字符串小于第二个字符串,则返回小于0的数字

strncpy函数

strncpy函数的实现

char * strncpy ( char * destination, const char * source, size_t num );

#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strncpy(char* arr1,char* arr2,int count)
{
    char* ret=arr1;
    while(count && *arr1++ == *arr2++)
    {
        count--;
    }
    for(;count>0;count--)
    {
        *arr1++='\0';
    }
    return ret;
}
int main()
{
    char arr1[]="abcdefghijk";
    char arr2[]="maya";
    printf("%s\n",strncpy(arr1,arr2,3));
    printf("%s\n",my_strncpy(arr1,arr2,3));

}

注意事项

1、拷贝num个字符从源字符串到目标空间。
2、如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

strncat函数

strncat函数的实现

#include<stdio.h>
#include<assert.h>
#include<string.h>
char* my_strncat(char* arr1,const char* arr2,int k)
{
    char* ret=arr1;
    while(*arr1++)
    {
        ;
    }
    arr1--;
    while(k--)
    {
        *arr1++=*arr2++;
    }
    *arr1='\0';
    return ret;
}
int main()
{
    char arr1[30]="ranshaozijiba";
    char arr2[]="wohaikeyi";
    //printf("%s\n",strncat(arr1,arr2,9));
    printf("%s\n",my_strncat(arr1,arr2,9));
    return 0;
}

注意事项

1、会在目标字符串中加入'\0'

2、要复制的字符串数量大于源字符串的数量,则只复制源字符串的数量,并不会在后面补齐'\0'。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值