在 C 语言中,字符串操作通常涉及到字符数组(char[]
)和一些标准库函数。C 语言标准库提供了一些处理字符串的函数,这些函数大多定义在 <string.h>
头文件中。以下是一些常见的字符串操作及其使用方法:
1. 字符串的定义和初始化
在 C 语言中,字符串是以 \0
结尾的字符数组。可以通过以下方式定义和初始化字符串:
// 定义一个字符串
char str1[] = "Hello, World!";
// 定义一个字符数组
char str2[20]; // 预留空间
strcpy(str2, "Hello");
2. 字符串复制 (strcpy
)
strcpy
用于将源字符串复制到目标字符串中:
#include <string.h>
char str1[] = "Hello";
char str2[20];
strcpy(str2, str1); // 将 str1 复制到 str2
3. 字符串连接 (strcat
)
strcat
用于将一个字符串追加到另一个字符串的末尾:
#include <string.h>
char str1[20] = "Hello";
char str2[] = " World";
strcat(str1, str2); // str1 变为 "Hello World"
4. 字符串长度 (strlen
)
strlen
用于获取字符串的长度(不包括结尾的 \0
):
#include <string.h>
char str[] = "Hello";
size_t len = strlen(str); // len 为 5
5. 字符串比较 (strcmp
)
strcmp
用于比较两个字符串。如果字符串相等,返回 0;如果不相等,返回非零值。
#include <string.h>
char str1[] = "Hello";
char str2[] = "hello";
int result = strcmp(str1, str2); // result 不是 0,因为大小写不同
6. 查找子字符串 (strstr
)
strstr
用于查找一个字符串中是否包含另一个子字符串,返回找到的位置指针,找不到返回 NULL
。
#include <string.h>
char str[] = "Hello, World!";
char *substr = strstr(str, "World"); // substr 指向 "World"
if (substr != NULL) {
printf("Found substring at position: %ld\n", substr - str);
}
7. 分割字符串 (strtok
)
strtok
用于按照指定的分隔符分割字符串。它返回一个指向字符串中第一个分割部分的指针。每次调用 strtok
都会返回字符串中的下一个分割部分,直到返回 NULL
为止。
#include <string.h>
#include <stdio.h>
char str[] = "Hello,World,Here,I,Am";
char *token = strtok(str, ","); // 第一次调用,分割出 "Hello"
while (token != NULL) {
printf("%s\n", token); // 打印分割出的字符串
token = strtok(NULL, ","); // 获取下一个分割部分
}
8. 查找字符位置 (strchr
)
strchr
用于查找指定字符在字符串中第一次出现的位置,返回一个指向该字符的指针。如果未找到,返回 NULL
。
#include <string.h>
#include <stdio.h>
char str[] = "Hello, World!";
char *ch_pos = strchr(str, 'o'); // 找到 'o' 第一次出现的位置
if (ch_pos != NULL) {
printf("Found 'o' at position: %ld\n", ch_pos - str);
}
9. 从字符串中提取部分字符串 (strncpy
)
strncpy
用于从源字符串复制指定长度的字符到目标字符串中。
#include <string.h>
char str[] = "Hello, World!";
char sub[6]; // 需要足够的空间存储复制的部分
strncpy(sub, str, 5); // 复制前 5 个字符 "Hello"
sub[5] = '\0'; // 确保最后一个字符是 '\0'
10. 字符串转换
转换为大写(strupr
)
将字符串中的所有字母转换为大写(在某些环境中支持)。
#include <ctype.h>
#include <string.h>
char str[] = "Hello, World!";
strupr(str); // 将 str 转换为 "HELLO, WORLD!"
转换为小写(strlwr
)
将字符串中的所有字母转换为小写(在某些环境中支持)。
#include <ctype.h>
#include <string.h>
char str[] = "Hello, World!";
strlwr(str); // 将 str 转换为 "hello, world!"
11. 字符串填充 (memset
)
memset
用于设置字符串(字符数组)中的每个字节为指定的值,通常用于初始化字符串。
#include <string.h>
char str[10];
memset(str, 'A', 9); // 将 str 的前 9 个字符设置为 'A'
str[9] = '\0'; // 确保字符串结束符
12. 字符串反转(自定义实现)
C 标准库没有提供反转字符串的函数,但可以通过 for
循环来手动反转字符串。
#include <string.h>
#include <stdio.h>
void reverseString(char str[]) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
char str[] = "Hello";
reverseString(str);
printf("Reversed string: %s\n", str); // 输出 "olleH"
return 0;
}
13. 总结
C 语言中的字符串操作虽然不像一些高级语言那么简洁,但它提供了强大的功能,可以满足大多数常见的字符串处理需求。常用的字符串操作包括复制、连接、比较、查找、分割、转换等。理解并掌握这些操作有助于你编写高效的 C 语言程序。