0
点赞
收藏
分享

微信扫一扫

strcpy、strlen()、strcat(拼接)、strcmp、strstr、memcpy()

践行数据分析 2022-03-12 阅读 75

一、strcpy

char *mystrcpy(char *str1,char *str2){
    if(str1==NULL || str2==NULL){
        return NULL;
    }
    char *temp=str1;
    while(*str2!='\0'){
        *str1=*str2;
        str1++;
        str2++;
    }
    *str1='\0';
    return temp;
}

int main(){
    char str1[]="  ";
    char str2[]="ad";
    mystrcpy(str1,str2);
    
    return 0;
}

二、strlen

int mystrlen(const char *str){
    if(str==NULL){
        return 0;
    }
    int len = 0;
    while (*str != '\0')
    {
        len++;
        str++;
    }
    return len;
}

三、strcat(拼接)

//手写strcat
char *mystrcat(char *str1,char *str2)
{
    if(str1==nullptr || str2==nullptr)
    {
        return nullptr;
    }
    char *temp=str1;
    while(*str1!='\0')
    {
        str1++;
    }
    while(*str2!='\0')
    {
        *str1=*str2;
        str1++;
        str2++;
    }
    *str1='\0';
    return temp;
}

四、strcmp

//手写strcmp
int mystrcmp(char *str1, char *str2)
{
    assert(str1 != nullptr && str2 != nullptr);
    int ret = 0;
    while (!(ret = *(unsigned char *)str1 - *(unsigned char *)str2) && *str1 != '\0')
    {
        str1++;
        str2++;
    }
    if (ret > 0)
    {
        return 1;
    }
    else if (ret < 0)
    {
        return -1;
    }
    return 0;
}

五、strstr

用法:
strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
char *strstr( char *str, char * substr );

【参数说明】str为要检索的字符串,substr为要检索的子串。

【返回值】返回字符串str中第一次出现子串substr的地址;如果没有检索到子串,则返回NULL。

//手写strstr
int mystrstr(char *str, char *substr)
{
    if (str == nullptr || substr == nullptr)
    {
        return -1;
    }
    int str_len = strlen(str);
    int substr_len = strlen(substr);
    if (str_len < substr_len)
    {
        return -1;
    }
    int j;
    for (int i = 0; i < str_len - substr_len; ++i)
    {
        for (j = 0; j < substr_len; ++j)
        {
            if (str[i + j] != substr[j])
            {
                break;
            }
        }
        if (j == substr_len)
        {
            return i;
        }
    }
    return -1;
}

六、memcpy()

//手写memcpy()函数
void *mymemcpy(void *str1, void *str2, size_t n)
{
    if (str1 == nullptr || str2 == nullptr)
    {
        return nullptr;
    }
    char *temp1 = (char *)str1;
    char *temp2 = (char *)str2;
    while (n--)
    {
        *temp1 = *temp2;
        temp1++;
        temp2++;
    }
    return str1;
}
举报

相关推荐

0 条评论