C语言标准库提供了许多字符串操作函数,用于对字符串进行复制、拼接、比较、查找等操作。这些函数都定义在头文件 <string.h>
中。
1. 字符串长度函数:strlen
- 功能:计算字符串的长度(不包括结尾的
\0
)。 - 原型:
size_t strlen(const char *str);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
printf("字符串长度是: %zu\n", strlen(str)); // 输出字符串长度
return 0;
}
运行结果:
字符串长度是: 13
2. 字符串复制函数:strcpy
和 strncpy
2.1 strcpy
- 功能:将源字符串复制到目标字符串。
- 原型:
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
2.2 strncpy
- 功能:复制指定长度的字符串。
- 原型:
char *strncpy(char *dest, const char *src, size_t n);
- 注意:如果源字符串长度小于
n
,目标字符串会被填充空字符。 - 示例:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello";
char dest[10] = {0};
strncpy(dest, src, 3);
printf("部分复制后的字符串: %s\n", dest);
return 0;
}
运行结果:
部分复制后的字符串: Hel
3. 字符串拼接函数:strcat
和 strncat
3.1 strcat
- 功能:将源字符串拼接到目标字符串的末尾。
- 原型:
char *strcat(char *dest, const char *src);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[] = " World";
strcat(str1, str2);
printf("拼接后的字符串: %s\n", str1);
return 0;
}
运行结果:
拼接后的字符串: Hello World
3.2 strncat
- 功能:拼接指定长度的字符串。
- 原型:
char *strncat(char *dest, const char *src, size_t n);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[] = " World";
strncat(str1, str2, 3); // 只拼接 " Wor"
printf("部分拼接后的字符串: %s\n", str1);
return 0;
}
运行结果:
部分拼接后的字符串: Hello Wor
4. 字符串比较函数:strcmp
和 strncmp
4.1 strcmp
- 功能:比较两个字符串。
- 如果返回值
< 0
,表示第一个字符串小于第二个字符串。 - 如果返回值
= 0
,表示两个字符串相等。 - 如果返回值
> 0
,表示第一个字符串大于第二个字符串。 - 原型:
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);
printf("比较结果: %d\n", result); // 结果为负数
return 0;
}
运行结果:
比较结果: -1
4.2 strncmp
- 功能:比较指定长度的字符串。
- 原型:
int strncmp(const char *str1, const char *str2, size_t n);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "apricot";
int result = strncmp(str1, str2, 3); // 比较前三个字符
printf("比较结果: %d\n", result); // 结果为0
return 0;
}
运行结果:
比较结果: 0
5. 字符串查找函数: strchr
和 strrchr
和 strstr
5.1 strchr
- 功能:查找字符在字符串中首次出现的位置。
- 原型:
char *strchr(const char *str, int c);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *pos = strchr(str, 'W');
if (pos) {
printf("字符 'W' 的位置: %ld\n", pos - str);
}
return 0;
}
运行结果:
字符 'W' 的位置: 7
5.2 strrchr
- 功能:查找字符在字符串中最后一次出现的位置。
- 原型:
char *strrchr(const char *str, int c);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *pos = strrchr(str, 'o');
if (pos) {
printf("字符 'o' 最后一次出现的位置: %ld\n", pos - str);
}
return 0;
}
运行结果:
字符 'o' 最后一次出现的位置: 8
5.3 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("子字符串 'World' 的位置: %ld\n", pos - str);
}
return 0;
}
运行结果:
子字符串 'World' 的位置: 7
6. 字符串分割函数:strtok
- 功能:将字符串分割为子字符串(基于分隔符)。
- 原型:
char *strtok(char *str, const char *delim);
- 注意:
strtok
会修改原字符串,并使用内部静态变量保存状态。 - 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello,World,You";
char *token = strtok(str, ",");
while (token != NULL) {
printf("分割出的子字符串: %s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
运行结果:
分割出的子字符串: Hello
分割出的子字符串: World
分割出的子字符串: You
7. 内存操作函数:memcpy
和 memmove
7.1 memcpy
- 功能:复制指定字节数的数据。
- 原型:
void *memcpy(void *dest, const void *src, size_t n);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello";
char dest[10];
memcpy(dest, src, 5);
dest[5] = '\0'; // 添加字符串结束符
printf("复制后的字符串: %s\n", dest);
return 0;
}
运行结果:
复制后的字符串: Hello
7.2 memmove
- 功能:复制指定字节数的数据(支持重叠区域)。
- 原型:
void *memmove(void *dest, const void *src, size_t n);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
memmove(str + 7, str, 5); // 将 "Hello" 移动到 "World" 的位置
printf("移动后的字符串: %s\n", str);
return 0;
}
运行结果:
移动后的字符串: Hello, Hello!
8. 字符串填充与清空函数:memset
8.1 memset
- 功能:将指定内存区域填充为某个值。
- 原型:
void *memset(void *s, int c, size_t n);
- 示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[10];
memset(str, 'A', 5); // 前5个字节填充为 'A'
str[5] = '\0'; // 添加字符串结束符
printf("填充后的字符串: %s\n", str);
return 0;
}
运行结果:
填充后的字符串: AAAAA
评论留言
欢迎您,!您可以在这里畅言您的的观点与见解!
0 条评论