一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - C/C++ - 仿寫C語(yǔ)言string.h頭文件檢驗(yàn)字符串函數(shù)

仿寫C語(yǔ)言string.h頭文件檢驗(yàn)字符串函數(shù)

2022-02-22 14:49code-016 C/C++

這里給大家分享的是一個(gè)C語(yǔ)言string.h頭文件檢驗(yàn)字符串函數(shù)的仿寫,非常的簡(jiǎn)單實(shí)用,小編覺(jué)得這篇文寫的還不錯(cuò),希望能夠給你帶來(lái)幫助

c語(yǔ)言string.h頭文件字符串檢驗(yàn)函數(shù)仿寫

所需頭文件:stdio.h ,stdlib.h, string.h

strlen字符串求長(zhǎng)度

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int strlen_my(const char* src_str)
{
    if (NULL == src_str)
    {
        return -1;
    }
    const char* p = src_str;
    while (*p != '\0')
    {  
        p++;
    }
    return p - &(src_str[0]);
}
//遞歸
int strlen_my2(const char* src_str)
{
    if (src_str == NULL)
        return -1;
    if (*src_str)
    {
        return strlen_my2(src_str + 1) + 1;
    }
    else
    {
        return 0;
    }
}
 int main()
{
    const char* p = "hello";
    printf("%d \n",strlen_my(p));
    return 0;
}

strcmp / strncmp字符串比較

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int strcmp_my(const char* str_a, const char* str_b)
{
    while ((*str_a != '\0' || *str_b != '\0') && *str_a == *str_b )
    {
        str_a++;
        str_b++;
    }
    return *str_a - *str_b > 0 ? 1 : (*str_a - * str_b < 0 ? -1 : 0);
}
int strcmp_my2(const char* str_a, const char* str_b)
{
    int sub = 0;
    while ((sub = *str_a - *str_b) == 0 && *str_a++ && *str_b++);   //先賦值,指針再++
    return sub > 0 ? 1 : (sub < 0 ? -1 : 0);
}
 int strncmp_my(const char* str_a, const char* str_b, size_t front_len)
{
    while (--front_len && *str_a != '\0' && *str_b != '\0'
        && *str_a == *str_b)
    {
        str_a++;
        str_b++;
    }
    return *str_a - *str_b > 0 ? 1 : (*str_a - *str_b < 0 ? -1 : 0);
}
 int main()
{
    const char* p = "hella";
    const char* q = "hell";
    printf("%d \n", strncmp_my(p, q, 4));
    return 0;
}

strchr / strrchr 字符串中查找字符ch

第一個(gè)出現(xiàn)的字符ch

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//strchr 返回字符串中第一個(gè)出現(xiàn)的字符ch
char* strchr_my(const char* src_str, char ch)
{
    if (src_str == NULL)
    {
        return NULL;
    }
    while (*src_str != '\0' && *src_str != ch)
    {
        src_str++;
    }
    return *src_str == '\0' ? NULL : src_str;
}
 int main()
{
    const char* p = "hello";
    p = strchr_my(p, 'e');
    if (p == NULL)
        return 0;
    printf("%c\n", *p);
}

最后一個(gè)出現(xiàn)的字符ch

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//strrchr查找字符串中最后一個(gè)出現(xiàn)的字母ch
char* strrchr_my(const char* src_str, char ch)
{
    if (NULL == src_str) return NULL;
    const char* p = src_str + strlen(src_str) - 1;
    while ((p - src_str) >= 0 && *p != ch)
    {
        p--;
    }
    if (p - src_str == -1)
    {
        return NULL;
    }
    return p;
}
 int main()
{
    const char* p = "hello";
    //p = strchr_my(p, 'q');
    p = strrchr_my(p, 'l');
    if (p == NULL)
        return 0;
    printf("%c\n", *p);
}

strstr 字符串匹配:src_str中查找des_str,返回匹配的起始位置,沒(méi)有為NULL(BF算法)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
char* strstr_my(const char* src_str, const char* des_str)
{
    if (NULL == src_str || NULL == des_str)
    {
        return NULL;
    }
    int len_src = strlen(src_str);
    int len_des = strlen(des_str);
    int i = 0;  //src_str
    int j = 0;  //des_str
    while (i < len_src && j < len_des)
    {
        if (src_str[i] == des_str[j])
        {
            i++;
            j++;
        }
        else
        {
            i = i - j + 1;
            j = 0;
        }
    }
    if (j == len_des)
    {
        return src_str + i - j;
    }
    return NULL;
}
 int main()
{
    const char* p = "hello";
    const char* q = "llo";
    const char* rt = strstr_my(p, q);
    if (rt != NULL)
    {
        printf("%s\n", rt);
        return 0;
    }
    return 0;
}

strcpy / strncpy字符串拷貝

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
char* strcpy_my(char* des_str, const char* src_str)
{
    if (des_str == NULL || src_str == NULL)
        return NULL;
    char* p = des_str;
    while (*src_str != '\0')
    {
        *p++ = *src_str++;
    }
    *p = '\0';
    return des_str;
}
 char* strncpy_my(char* des_str, const char* src_str, size_t len)
{
    if (des_str == NULL || src_str == NULL || len <= 0)
        return NULL;
    char* p = des_str;
    //源字符串實(shí)際長(zhǎng)度
    int cur_len = strlen(src_str) <= len ? len : strlen(src_str);
    while (cur_len--)
    {
        *p++ = *src_str++;
    }
    *p = '\0';
    return des_str;
}
 int main()
{
    const char* p = "hello";
    char q[10] = {0};
    if (strncpy_my(q, p, 1) != NULL)
    {
        printf("%s\n", q);
    }
    return 0;
}

strcat / strncat字符串的粘貼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
char* strcat_my(char* des_str, const char* src_str)
{
    if (des_str == NULL || src_str == NULL)
        return NULL;
    int len_des = strlen(des_str);
    char* p = des_str + len_des;
    while (*src_str != '\0')
    {
        *p++ = *src_str++;
    }
    return des_str;
}
 char* strncat_my(char* des_str, const char* src_str, size_t len)
{
    if (des_str == NULL || src_str == NULL || len < 0)
        return NULL;
    int len_des = strlen(des_str);
    char* p = des_str + len_des;
 
    while (len--)
    {
        *p++ = *src_str++;
    }
    return des_str;
}
 int main()
{
    char p[20] = "hello";
    const char* q = "world";
    printf("p = %s\n", p);
    printf("q = %s\n", q);
    if (strncat_my(p, q, 3) != NULL)
    {
        printf("p = %s\n", p);
    }
    printf("q = %s\n", q);
    return 0;
}

strdup 字符串申請(qǐng)堆區(qū)空間存放字符串的副本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
char* strdup_my(const char* src_str)
{
    if (NULL == src_str)
        return NULL;
    char* newspace = (char*)malloc((strlen(src_str) + 1 ) * sizeof(char));
    if (newspace == NULL)
        return NULL;
    int i = 0;
    while (*src_str != '\0')
    {
        newspace[i++] = *src_str++;
    }
    newspace[i] = '\0';
    return newspace;
}
int main()
{
    const char* p = "hello";
    char* q = strdup_my(p);
    if (q != NULL)
    {
        printf("%s\n", q);
        free(q);
        q == NULL;
    }
    return 0;
}

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!

原文鏈接:https://blog.csdn.net/xiaoxiaoguailou/article/details/121267391

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: ak福利午夜在线观看 | 亚洲视频在线一区二区三区 | 精品久久久久久久国产潘金莲 | 久久观看视频 | 精品一区二区三区视频日产 | 91桃色视频在线观看 | uoco福利姬 | 岛国免费大片 | 亚洲国产精品一区二区首页 | 国产欧美一区二区成人影院 | 免费国产好深啊好涨好硬视频 | 色综合天天娱乐综合网 | 好吊色视频988gao在线观看 | aⅴ视频在线免播放观看 | 性一交一无一伦一精一品 | 电车痴汉中文字幕 | 亚洲国产精品无码中文在线 | 色综七七久久成人影 | 久草热在线 | 国产最强大片免费视频 | 成人尤物 | 日韩亚洲欧美综合一区二区三区 | 狠狠色综合久久久久尤物 | xxxx意大利xxxxhd| 完整秽淫刺激长篇小说 | 双性肉文h| 87影院在线观看视频在线观看 | 免费看1级伦理 | mmkk在线看片 | 欧美kkk4444在线观看 | 视频一区二区国产无限在线观看 | 成人免费视频一区二区 | 欧美日韩在线一区 | 欧美色阁 | 99久久香蕉国产线看观香 | 成人依依网| 美女任你模 | 成人影院视频 | 欧美日韩国产最新一区二区 | 456老汉gay| 亚洲成色WWW久久网站夜月 |