服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言详细讲解常用字符串处理函数

C语言详细讲解常用字符串处理函数

2022-11-22 12:23嵌入式宇宙 C/C++

在日常编程中,对于字符串的操作中我们都很习惯的使用一些C库中自带的函数,并且关于字符串的操作函数基本都在 string.h 这个头文件中。关于C库字符串常用处理函数也是平时面试或者考试过程中非常喜欢考的,本文将带大家手

一、strlen()

1. 函数原型:

size_t strlen(const char *str)

参数str: 要计算的字符串的长度
返回值: 返回字符串 str 的长度,直到遇到结束字符'\0',但不包括结束字符。
size_t 是一个无符号整数类型。

2. 手动实现:

源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
size_t my_strlen(const char *str)
{
    size_t len = 0;
    while (*str++ != '\0') {
        len++;
    }
    return len;
}
int main()
{
    char *p = "hello world";
    int len_1 = 0, len_2 = 0;
 
    len_1 = my_strlen(p);
    len_2 = strlen(p);
    printf("len_1 = %d, len_2 = %d\n", len_1, len_2);
    return 0;
}

运行结果:

len_1 = 11, len_2 = 11

二、strcat()

1. 函数原型:

char *strcat(char *dest, const char *src)

参数1: 目标字符串,该空间需要足够容纳后续追加的字符串。
参数2: 要追加的字符串。
返回值: 返回指向目标字符串的指针。

2. 手动实现:

源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
char *my_strcat(char *dest, const char *src)
{
    while (*dest != '\0') {
        dest++;
    }
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
int main()
{
    char p1[20] = "hello ";
    char p2[20] = "hello ";
    char *q = "world";
    my_strcat(p1, q);
    strcat(p2, q);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

运行结果:

p1 = hello world, p2 = hello world

三、strcpy()

1. 函数原型:

char *strcpy(char *dest, const char *src)

参数1: 要存储的目标字符串。
参数2: 要复制的字符串。
返回值: 返回指向目标字符串的指针。

2. 手动实现:

源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>
char *my_strcpy(char *dest, const char *src)
{
    while (*src != '\0') {
        *dest++ = *src++;
    }
    *dest = '\0';
    return dest;
}
int main()
{
    char p1[20] = {'\0'};
    char p2[20] = {'\0'};
    char *q = "hello world";
    my_strcpy(p1, q);
    strcpy(p2, q);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

运行结果:

p1 = hello world, p2 = hello world

四、strcmp()

1. 函数原型:

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

参数1: 要比较的第一个字符串
参数2: 要比较的第二个字符串
返回值:
    如果返回值 < 0,则表示 str1 小于 str2。
    如果返回值 > 0,则表示 str1 大于 str2。
    如果返回值 = 0,则表示 str1 等于 str2。

2. 手动实现:

源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
int my_strcmp(const char *str1, const char *str2)
{
    int ret = 0;
    while ((*str1 != '\0') && (*str1 == *str2)) {
        str1++;
        str2++;
    }
    ret = *str1 - *str2;
    return ret;
}
int main()
{
    char p1[20] = {"hello world"};
    char p2[20] = {"hello aorld"};
    int ret_1, ret_2;
    ret_1 = my_strcmp(p2, p1);
    ret_2 = strcmp(p2, p1);
    printf("ret_1 = %d, ret_2 = %d\n", ret_1, ret_2);
    return 0;
}

运行结果:

ret_1 = -22, ret_2 = -22

五、memset()

1. 函数原型:

void *memset(void *str, int c, size_t n)

参数1: 要设置的内存块
参数2: 要填充的值,在填充内存块时是使用该值的无符号字符形式。
参数3: 填充的字符个数。
返回值: 返回指向str的指针。

2. 手动实现:

源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <string.h>
void *my_memset(void *str, int c, size_t n)
{
    if (str == NULL)
        return NULL;
    char *pstr = (char*)str;
    while (n-- > 0) {
        *pstr++ = c ;
    }
    return str;
}
int main()
{
    char p1[20] = {"hello world"};
    char p2[20] = {"hello world"};
    my_memset(p1, '*', 5);
    memset(p2, '*', 5);
    printf("p1 = %s, p2 = %s\n", p1, p2);
    return 0;
}

运行结果:

p1 = ***** world, p2 = ***** world

到此这篇关于C语言详细讲解常用字符串处理函数的文章就介绍到这了,更多相关C语言字符串函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/liung_/article/details/124236693

延伸 · 阅读

精彩推荐
  • C/C++用C语言实现扫雷游戏

    用C语言实现扫雷游戏

    这篇文章主要为大家详细介绍了用C语言实现扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Enthusiastic_boy9752021-11-12
  • C/C++C++中图片重命名实现代码

    C++中图片重命名实现代码

    这篇文章主要介绍了C++中图片重命名实现代码,需要的朋友可以参考下...

    C++教程网10152021-05-12
  • C/C++详解C语言通过递归与非递归实现蛇形矩阵

    详解C语言通过递归与非递归实现蛇形矩阵

    蛇形矩阵(Snake matrix)是矩阵的一种,常被应用在编程题目与数学数列中,需要提取每条斜线里最小的数字,本篇文章将会通过递归和非递归来分别实现蛇...

    诚挚的乔治4792022-09-19
  • C/C++C语言数据结构之单向链表详解分析

    C语言数据结构之单向链表详解分析

    链表可以说是一种最为基础的数据结构了,而单向链表更是基础中的基础。链表是由一组元素以特定的顺序组合或链接在一起的,不同元素之间在逻辑上相...

    DDsoup9172022-02-20
  • C/C++C++实现动态绑定代码分享

    C++实现动态绑定代码分享

    对于C++动态绑定的理解,就是编译器用静态分析的方法加上虚拟函数的设计实现在程序运行时动态智能执行正确虚拟函数的技术。要彻底理解动态绑定,只...

    C++教程网3892021-03-16
  • C/C++MFC列表控件CListCtrl使用方法示范

    MFC列表控件CListCtrl使用方法示范

    这篇文章主要介绍了MFC列表控件CListCtrl使用方法示范,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    htj1012352021-09-18
  • C/C++C/C++函数调用的几种方式总结

    C/C++函数调用的几种方式总结

    本篇文章主要是对C/C++函数调用的几种方式进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助...

    C语言教程网11502021-01-12
  • C/C++C++ 实现PE文件特征码识别的步骤

    C++ 实现PE文件特征码识别的步骤

    PE文件就是我们常说的EXE可执行文件,针对文件特征的识别可以清晰的知道该程序是使用何种编程语言实现的,前提是要有特征库,PE特征识别有多种形式,...

    lyshark3922021-11-17