C 面试的重难点:字符串操作strlen/strcat/strcpy/strcmp/strchr/strstr自实现

C 字符串操作strlen/strcat/strcpy/strcmp/strchr/strstr自实现

一、实现

(1)strlen

int myStrlen(const char *str)
{
	int len = 0;
	while (*str++)
		len++;
	return len;
}

在这里插入图片描述
(2)strcat

char * myStrcat(char *dst, const char *str)
{
	char *d = dst;
	while (*dst) dst++;
	while (*dst++ = *str++);
	return d;
}

在这里插入图片描述
(3)strcpy

char * myStrcpy(char *dst, const char *str)
{
	char *d = dst;
	while (*dst++ = *str++);
	return d;
}

在这里插入图片描述
(4)strcmp

int myStrcmp(const char *str1, const char *str2)
{
	for (; (*str1&&*str2) && *str1==*str2;str1++,str2++);
	return *str1 - *str2;
}

在这里插入图片描述
(5)strchr

char *myStrchr(const char *str,char ch)
{
    while(*str)
    {
        if(*str==ch)
            return str;
        *str++;
    }
    return NULL;
}

在这里插入图片描述
(6)strstr

char *myStrstr(const char *str,char * dst)
{
    if(*dst)
    {
        while(*str)
        {
            for(int i=0;*(str+i)==*(dst+i);i++)
            {
                if('\0'==*(dst+i+1))
                    return str;
            }
            str++;
        }
        return NULL;
    }
    else
        return str;
}

在这里插入图片描述

二、测试
#include<stdio.h>
#include<string.h>
int myStrlen(const char *str);
char * myStrcat(char *dst,const char *str);
char * myStrcpy(char *dst, const char *str);
int myStrcmp(const char *str1, const char *str2);
char *myStrchr(const char *str,char ch);
char *myStrstr(const char *str,char * dst);
int main()
{
    char * srcStr = "i love c!";
    printf("strlen= %d\t",strlen(srcStr));
    printf("myStrlen= %d\n", myStrlen(srcStr));

    char cat1[1024] = "hello!";
    strcat(cat1, srcStr);
    printf("strcat= %s\t", cat1);
    char cat2[1024] = "hello!";
    myStrcat(cat2, srcStr);
    printf("myStrcat= %s\n", cat2);

    char cpy1[1024] = {0};
    strcpy(cpy1,cat1);
    printf("strcpy= %s\t", cpy1);
    char cpy2[1024] = { 0 };
    myStrcpy(cpy2,cat2);
    printf("myStrcpy= %s\n", cpy2);


    char *str1 = "abcgdefg";
    char *str2 = "bbcgdefg";

    if(0==strcmp(str1,str2))
        printf("==\t");
    else if(strcmp(str1, str2) <0)
        printf("<\t");
    else
        printf(">\t");

    if(0==strcmp(str1,str2))
        printf("==\n");
    else if(myStrcmp(str1, str2) <0)
        printf("<\n");
    else
        printf(">\n");
        
    printf("strchr= %s\t",strchr(str1,'g'));
    printf("myStrchr= %s\n",myStrchr(str1,'g'));

    printf("strstr= %s\t",strstr(str1,"cgd"));
    printf("myStrstr= %s\t",myStrstr(str1,"cgd"));

    return 0;
}
int myStrlen(const char *str)
{
    int len = 0;
    while (*str++)
        len++;
    return len;
}
char * myStrcat(char *dst, const char *str)
{
    char *d = dst;
    while (*dst) dst++;
    while (*dst++ = *str++);
    return d;
}
char * myStrcpy(char *dst, const char *str)
{
    char *d = dst;
    while (*dst++ = *str++);
    return d;
}
int myStrcmp(const char *str1, const char *str2)
{
    for (; (*str1&&*str2) && *str1==*str2;str1++,str2++);
    return *str1 - *str2;
}
char *myStrchr(const char *str,char ch)
{
    while(*str)
    {
        if(*str==ch)
            return str;
        *str++;
    }
    return NULL;
}
char *myStrstr(const char *str,char * dst)
{
    if(*dst)
    {
        while(*str)
        {
            for(int i=0;*(str+i)==*(dst+i);i++)
            {
                if('\0'==*(dst+i+1))
                    return str;
            }
            str++;
        }
        return NULL;
    }
    else
        return str;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值