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

服務(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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 喜欢老头吃我奶躁我的动图 | 日产精品一二三四区国产 | 国产成人激烈叫床视频 | 激情婷婷成人亚洲综合 | 日本狠狠操 | 九九精品视频在线观看 | 插入影院| 色哟哟哟在线精品观看视频 | 午夜亚洲WWW湿好爽 午夜想想爱午夜剧场 | 欧美专区亚洲 | 日本午夜vr影院新入口 | 美女用手扒开粉嫩的屁股 | 女攻双性| 视频一区二区国产无限在线观看 | 亚洲毛片网 | 国产精品一区二区久久不卡 | 欧美一级h| 日韩国产成人精品视频人 | 日本片免费观看一区二区 | 国内精品免费一区二区三区 | 日本丰满www色 | 小早川怜子视频在线观看 | 免费视频观看 | 久久精品手机观看 | 四虎影视免费观看 | 亚洲第一网色综合久久 | 亚洲天天做夜夜做天天欢 | 天天曰| 百合漫画咱啪全彩抚慰 | 日本亚欧乱色视频在线观看 | 好紧水好多 | 国产清纯白嫩大学生正在播放 | 国产九九| 欧美男人的天堂 | 激情艳妇 | 精品亚洲永久免费精品 | 国内自拍网红在综合图区 | 男人天堂2023 | 久草大| 校花小雪灌满了男人们的浓浆 | 成人1234 |