C语言字符串操作函数详解
在C语言中,字符串是以 null
终止的字符数组。要使用字符串操作函数,首先需要包含相应的头文件:
#include <stdio.h> // 输入输出操作
#include <string.h> // 字符串操作函数
这些头文件提供了字符串操作所需的函数声明。以下是常用字符串操作函数的详细讲解,包括每个函数的参数、返回值说明以及示例代码。每个函数的使用说明还包括了适当的表格以帮助理解其功能和用法。
函数汇总
函数 | 作用 | 参数说明 | 返回值说明 |
---|---|---|---|
strlen |
计算字符串长度 | str : 指向要计算长度的字符串的指针 |
字符串的长度(不包括 null 终止符) |
strcpy |
复制字符串 | dest : 目标字符数组指针,src : 源字符串指针 |
指向目标字符串 dest 的指针 |
strncpy |
复制指定长度的字符串 | dest : 目标字符数组指针,src : 源字符串指针,n : 最大字符数 |
指向目标字符串 dest 的指针 |
strcat |
连接字符串 | dest : 目标字符数组指针,src : 源字符串指针 |
指向目标字符串 dest 的指针 |
strncat |
连接指定长度的字符串 | dest : 目标字符数组指针,src : 源字符串指针,n : 最大字符数 |
指向目标字符串 dest 的指针 |
strcmp |
比较两个字符串 | str1 : 第一个字符串指针,str2 : 第二个字符串指针 |
比较结果:负值、零或正值 |
strncmp |
比较指定长度的字符串 | str1 : 第一个字符串指针,str2 : 第二个字符串指针,n : 比较长度 |
比较结果:负值、零或正值 |
strchr |
查找第一次出现的字符 | str : 要搜索的字符串指针,c : 要查找的字符 |
指向第一次出现字符 c 的指针 |
strrchr |
查找最后一次出现的字符 | str : 要搜索的字符串指针,c : 要查找的字符 |
指向最后一次出现字符 c 的指针 |
strstr |
查找子字符串 | haystack : 要搜索的字符串指针,needle : 要查找的子字符串指针 |
指向第一次出现子字符串 needle 的位置 |
1. strlen
函数原型:
size_t strlen(const char *str);
参数说明:
str
: 指向要计算长度的字符串的指针。
返回值说明:
- 返回字符串
str
的长度(不包括null
终止符)。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "Hello, World!";
size_t len = strlen(str);
printf("字符串长度: %zu\n", len); // 输出: 字符串长度: 13
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strlen |
计算字符串长度 | strlen("Hello, World!") |
字符串长度: 13 |
2. strcpy
函数原型:
char *strcpy(char *dest, const char *src);
参数说明:
dest
: 指向目标字符数组的指针,该数组用于存储复制后的字符串。src
: 指向源字符串的指针,表示要复制的字符串。
返回值说明:
- 返回指向目标字符串
dest
的指针。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char dest[50];
const char *src = "Hello, World!";
strcpy(dest, src);
printf("复制后的字符串: %s\n", dest); // 输出: 复制后的字符串: Hello, World!
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strcpy |
复制字符串 | strcpy(dest, "Hello, World!") |
复制后的字符串: Hello, World! |
3. strncpy
函数原型:
char *strncpy(char *dest, const char *src, size_t n);
参数说明:
dest
: 指向目标字符数组的指针。src
: 指向源字符串的指针。n
: 要复制的最大字符数。
返回值说明:
- 返回指向目标字符串
dest
的指针。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char dest[50];
const char *src = "Hello, World!";
strncpy(dest, src, 5);
dest[5] = '\0'; // 确保目标字符串以 null 终止
printf("复制后的字符串: %s\n", dest); // 输出: 复制后的字符串: Hello
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strncpy |
复制指定长度的字符串 | strncpy(dest, "Hello, World!", 5) |
复制后的字符串: Hello |
4. strcat
函数原型:
char *strcat(char *dest, const char *src);
参数说明:
dest
: 指向目标字符数组的指针,该数组用于存储连接后的字符串。src
: 指向源字符串的指针,表示要追加的字符串。
返回值说明:
- 返回指向目标字符串
dest
的指针。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char dest[50] = "Hello, ";
const char *src = "World!";
strcat(dest, src);
printf("连接后的字符串: %s\n", dest); // 输出: 连接后的字符串: Hello, World!
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strcat |
连接字符串 | strcat(dest, "World!") |
连接后的字符串: Hello, World! |
5. strncat
函数原型:
char *strncat(char *dest, const char *src, size_t n);
参数说明:
dest
: 指向目标字符数组的指针。src
: 指向源字符串的指针。n
: 要追加的最大字符数。
返回值说明:
- 返回指向目标字符串
dest
的指针。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char dest[50] = "Hello, ";
const char *src = "World!";
strncat(dest, src, 3);
printf("连接后的字符串: %s\n", dest); // 输出: 连接后的字符串: Hello, Wor
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strncat |
连接指定长度的字符串 | strncat(dest, "World!", 3) |
连接后的字符串: Hello, Wor |
6. strcmp
函数原型:
int strcmp(const char *str1, const char *str2);
参数说明:
str1
: 指向第一个要比较的字符串的指针。str2
: 指向第二个要比较的字符串的指针。
返回值说明:
- 如果
str1
小于str2
,返回负值; - 如果
str1
等于str2
,返回零; - 如果
str1
大于str2
,返回正值。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
int result = strcmp("Hello", "World");
if (result < 0) {
printf("字符串 'Hello' 小于 'World'\n"); // 输出: 字符串 'Hello' 小于 'World'
} else if (result == 0) {
printf("字符串 'Hello' 等于 'World'\n");
} else {
printf("字符串 'Hello' 大于 'World'\n");
}
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strcmp |
比较两个字符串 | strcmp("Hello", "World") |
字符串 'Hello' 小于 'World' |
7. strncmp
函数原型:
int strncmp(const char *str1, const char *str2, size_t n);
参数说明:
str1
: 指向第一个要比较的字符串的指针。str2
: 指向第二个要比较的字符串的指针。n
: 要比较的最大字符数。
返回值说明:
- 如果
str1
小于str2
,返回负值; - 如果
str1
等于str2
,返回零; - 如果
str1
大于str2
,返回正值。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
int result = strncmp("Hello, World!", "Hello, C!", 7);
if (result < 0) {
printf("字符串 'Hello, World!' 小于 'Hello, C!' (前7个字符)\n"); // 输出: 字符串 'Hello, World!' 小于 'Hello, C!' (前7个字符)
} else if (result == 0) {
printf("字符串 'Hello, World!' 等于 'Hello, C!' (前7个字符)\n");
} else {
printf("字符串 'Hello, World!' 大于 'Hello, C!' (前7个字符)\n");
}
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strncmp |
比较指定长度的字符串 | strncmp("Hello, World!", "Hello, C!", 7) |
字符串 'Hello, World!' 小于 'Hello, C!' (前7个字符) |
8. strchr
函数原型:
char *strchr(const char *str, int c);
参数说明:
str
: 指向要搜索的字符串的指针。c
: 要查找的字符(以int
类型传递,但实际上是char
)。
返回值说明:
- 返回指向第一次出现的字符
c
的指针; - 如果字符不在字符串中,则返回
NULL
。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "Hello, World!";
char *ptr = strchr(str, 'W');
if (ptr != NULL) {
printf("字符 'W' 的位置: %s\n", ptr); // 输出: 字符 'W' 的位置: World!
} else {
printf("字符 'W' 未找到\n");
}
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strchr |
查找第一次出现的字符 | strchr("Hello, World!", 'W') |
字符 'W' 的位置: World! |
9. strrchr
函数原型:
char *strrchr(const char *str, int c);
参数说明:
str
: 指向要搜索的字符串的指针。c
: 要查找的字符(以int
类型传递,但实际上是char
)。
返回值说明:
- 返回指向最后一次出现的字符
c
的指针; - 如果字符不在字符串中,则返回
NULL
。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
const char *str = "Hello, World!";
char *ptr = strrchr(str, 'o');
if (ptr != NULL) {
printf("字符 'o' 的最后一次出现位置: %s\n", ptr); // 输出: 字符 'o' 的最后一次出现位置: orld!
} else {
printf("字符 'o' 未找到\n");
}
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strrchr |
查找最后一次出现的字符 | strrchr("Hello, World!", 'o') |
字符 'o' 的最后一次出现位置: orld! |
10. strstr
函数原型:
char *strstr(const char *haystack, const char *needle);
参数说明:
haystack
: 指向要搜索的字符串的指针。needle
: 指向要查找的子字符串的指针。
返回值说明:
- 返回指向第一次出现的子字符串
needle
的位置; - 如果子字符串不在字符串中,则返回
NULL
。
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
const char *haystack = "Hello, World!";
const char *needle = "World";
char *ptr = strstr(haystack, needle);
if (ptr != NULL) {
printf("子字符串 '%s' 的位置: %s\n", needle, ptr); // 输出: 子字符串 'World' 的位置: World!
} else {
printf("子字符串 '%s' 未找到\n", needle);
}
return 0;
}
表格说明:
函数 | 作用 | 示例 | 输出 |
---|---|---|---|
strstr |
查找子字符串 | strstr("Hello, World!", "World") |
子字符串 'World' 的位置: World! |
11. 总结
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
12. 结束语
- 本节内容已经全部介绍完毕,希望通过这篇文章,大家对C语言
void
关键字区别有了更深入的理解和认识。- 感谢各位的阅读和支持,如果觉得这篇文章对你有帮助,请不要吝惜你的点赞和评论,这对我们非常重要。再次感谢大家的关注和支持!