首页 > 编程笔记 > C语言笔记 阅读:26

C语言处理字符串的十个函数(附带大量实例)

在 C语言中,字符串是以 \0(空字符)结尾的字符数组,用于表示文本数据。

为了方便处理字符串,C语言标准库提供了丰富的字符串处理函数,定义在 <string.h> 头文件中,这些函数可以帮助我们完成字符串的复制、比较、连接、查找等操作。

阅读本文前,读者需搞清楚 C语言字符数组和字符串的基本用法。接下来,我们将直接深入讲解常见的字符串处理函数,并通过大量实例帮助你掌握它们。

C语言常用的字符串处理函数

C语言的字符串处理函数主要集中在 <string.h> 头文件中,使用这些函数前必须包含该头文件。

字符串处理函数操作的对象通常是字符串(以 \0 结尾的字符数组),它们极大地方便了文本处理任务。

以下是我们将要讲解的主要函数:


接下来,我们将逐一详细讲解这些函数。

1、strlen()计算字符串长度

strlen() 函数的原型如下:
size_t strlen(const char *str);

例如:
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello";
    size_t len = strlen(str);
    printf("字符串长度:%zu\n", len);
    return 0;
}

输出结果:

字符串长度:5

strlen() 只计算实际字符数,不包括末尾的 \0。如果传入的不是以 \0 结尾的字符数组,结果将是未定义的。

2、strcpy()strncpy()复制字符串

1)strcpy()

strcpy() 将源字符串(包括 \0)复制到目标字符串。

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


示例:

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "hello";
    char dest[10];
    strcpy(dest, src);
    printf("复制后的字符串:%s\n", dest);
    return 0;
}

输出结果:

复制后的字符串:hello

注意:dest 必须有足够的空间容纳 src,否则会引发缓冲区溢出。

2)strncpy()

strncpy 是更安全的版本,允许指定复制的最大字符数。

char *strncpy(char *dest, const char *src, size_t n);


示例:

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "hello world";
    char dest[6];
    strncpy(dest, src, 5); // 只复制前 5 个字符
    dest[5] = '\0';       // 手动添加结束符
    printf("复制后的字符串:%s\n", dest);
    return 0;
}

输出结果:

复制后的字符串:hello

注意:strncpy 不会自动添加 \0,如果 n 小于 src 长度,需手动补上。

3、strcat()strncat()连接字符串

1)strcat()

strcat() 将源字符串追加到目标字符串末尾。

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

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "hello";
    char src[] = " world";
    strcat(dest, src);
    printf("连接后的字符串:%s\n", dest);
    return 0;
}

输出结果:

连接后的字符串:hello world

2) strncat()

strncat() 限制追加的字符数。

char *strncat(char *dest, const char *src, size_t n);

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char dest[20] = "hello";
    char src[] = " world";
    strncat(dest, src, 3); // 只追加 " wo"
    printf("连接后的字符串:%s\n", dest);
    return 0;
}

输出结果:

连接后的字符串:hello wo

strncat 会自动添加 \0,无需手动补齐。

4、strcmp()strncmp()比较字符串

1)strcmp()

strcmp 按字典序比较两个字符串。

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


示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "banana";
    int result = strcmp(str1, str2);
    if (result < 0) printf("str1 < str2\n");
    else if (result > 0) printf("str1 > str2\n");
    else printf("str1 == str2\n");
    return 0;
}

输出结果:

str1 < str2

2)strncmp()

strncmp() 只比较前 n 个字符。

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "apple";
    char str2[] = "apricot";
    int result = strncmp(str1, str2, 2);
    if (result == 0) printf("前 2 个字符相等\n");
    return 0;
}

输出结果:

前 2 个字符相等

5、strchr()strrchr()查找字符

1)strchr()

strchr() 查找字符在字符串中第一次出现的位置。

char *strchr(const char *str, int c);


示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello";
    char *pos = strchr(str, 'l');
    if (pos) printf("'l' 首次出现位置:%ld\n", pos - str);
    return 0;
}

输出结果:

'l' 首次出现位置:2

2)strrchr()

strrchr() 查找最后一次出现的位置。

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello";
    char *pos = strrchr(str, 'l');
    if (pos) printf("'l' 最后出现位置:%ld\n", pos - str);
    return 0;
}

输出结果:

'l' 最后出现位置:3

6、strstr()查找子字符串

strstr() 查找子字符串首次出现的位置。

char *strstr(const char *haystack, const char *needle);


示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello world";
    char *pos = strstr(str, "world");
    if (pos) printf("子字符串位置:%ld\n", pos - str);
    return 0;
}

输出结果:

子字符串位置:6

函数对比表格

函数 功能 返回值 注意事项
strlen() 计算长度 size_t 不含 \0
strcpy() 复制字符串 char * 可能溢出
strncpy() 有限复制 char * 需手动加 \0
strcat() 连接字符串 char * 需确保空间
strcmp() 比较字符串 int 字典序

注意事项

总结

C语言标准库提供了多个处理字符串的函数,为文本操作提供了强大支持。

阅读完本文,你已经掌握了 C 语言处理字符串的常用函数,建议在实践中结合这些函数编写程序,如字符串分割或搜索,以加深理解。

相关文章