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