C 标准库 string.h
提供了一系列用于处理字符串的函数,包括复制、比较、连接、搜索、分割等功能。下面我们详细讲解其完整使用攻略。
1. 复制操作
strcpy
原型:char *strcpy(char *dest, const char *src)
作用:将字符串 src
复制到 dest
中,并返回 dest
。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[20];
// 复制 str1 到 str2
strcpy(str2, str1);
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
输出:
str1: Hello, World!
str2: Hello, World!
strncpy
原型:char *strncpy(char *dest, const char *src, size_t n)
作用:将字符串 src
的前 n
个字符复制到 dest
中,并返回 dest
。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[20];
// 复制 str1 的前 8 个字符到 str2
strncpy(str2, str1, 8);
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
输出:
str1: Hello, World!
str2: Hello, W
2. 比较操作
strcmp
原型:int strcmp(const char *str1, const char *str2)
作用:按字典顺序比较字符串 str1
和 str2
,返回值为 0 表示相等,为正数则 str1
大于 str2
,为负数则 str1
小于 str2
。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[] = "Hello, World!";
char str3[] = "hello, world!";
int result1 = strcmp(str1, str2);
int result2 = strcmp(str1, str3);
printf("result1: %d\n", result1);
printf("result2: %d\n", result2);
return 0;
}
输出:
result1: 0
result2: 32
strncmp
原型:int strncmp(const char *str1, const char *str2, size_t n)
作用:按字典顺序比较字符串 str1
和 str2
的前 n
个字符,返回值与 strcmp
相同。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[] = "Hello, W";
char str3[] = "Hello, w";
int result1 = strncmp(str1, str2, 8);
int result2 = strncmp(str1, str3, 8);
printf("result1: %d\n", result1);
printf("result2: %d\n", result2);
return 0;
}
输出:
result1: 0
result2: 32
3. 连接操作
strcat
原型:char *strcat(char *dest, const char *src)
作用:将字符串 src
连接到 dest
的末尾,并返回 dest
。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello, ";
char str2[] = "World!";
// 连接 str2 到 str1 的末尾
strcat(str1, str2);
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
输出:
str1: Hello, World!
str2: World!
strncat
原型:char *strncat(char *dest, const char *src, size_t n)
作用:与 strcat
类似,但只连接 src
的前 n
个字符到 dest
的末尾,并返回 dest
。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello, ";
char str2[] = "World!";
// 连接 str2 的前 3 个字符到 str1 的末尾
strncat(str1, str2, 3);
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
return 0;
}
输出:
str1: Hello, Wor
str2: World!
4. 搜索操作
strstr
原型:char *strstr(const char *haystack, const char *needle)
作用:在字符串 haystack
中搜索子串 needle
,返回指向第一次出现的位置的指针,如果未找到则返回 NULL。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
// 在 str 中搜索子串 "World"
char *result = strstr(str, "World");
printf("result: %s\n", result);
return 0;
}
输出:
result: World!
5. 分割操作
strtok
原型:char *strtok(char *str, const char *delims)
作用:分割字符串 str
,delims 为分隔符,函数第一次调用时将 str
作为参数传入,之后再次调用时将传入 NULL。每次调用将返回被分割出的子串。
示例:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,grape";
// 按逗号分割 str
char *result = strtok(str, ",");
while (result != NULL) {
printf("%s\n", result);
result = strtok(NULL, ",");
}
return 0;
}
输出:
apple
banana
grape
总结
C 标准库 string.h
提供了一系列用于处理字符串的函数,其中复制、比较、连接、搜索、分割等操作可以满足不同的需求。在使用这些函数时需要注意内存分配是否充足、避免指针越界等问题,并根据具体的需求选择合适的函数来操作字符串。