最全解析:C 语言字符串查找函数279
在 C 语言中,字符串查找是一个常用的操作,它可以帮助我们快速定位字符串中的子串或字符。C 语言提供了丰富的字符串查找函数,每种函数都有其独特的用法和优势。本文将详细介绍这些函数,帮助你全面掌握 C 语言中的字符串查找。
1. strcmp()
strcmp() 函数比较两个字符串,并返回一个整数,表示这两个字符串之间的比较结果。如果第一个字符串大于第二个字符串,则返回一个正整数;如果第一个字符串小于第二个字符串,则返回一个负整数;如果两个字符串相等,则返回 0。
#include
int main() {
char str1[] = "Hello world";
char str2[] = "Hello World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("两个字符串相等");
} else if (result > 0) {
printf("第一个字符串大于第二个字符串");
} else {
printf("第一个字符串小于第二个字符串");
}
return 0;
}
2. strncmp()
strncmp() 函数与 strcmp() 类似,但它只比较字符串的前 n 个字符(n 由第三个参数指定)。如果前 n 个字符相等,则返回 0;如果不相等,则返回一个整数,表示比较结果。
#include
int main() {
char str1[] = "Hello world";
char str2[] = "Hello universe";
int result = strncmp(str1, str2, 5);
if (result == 0) {
printf("前 5 个字符相等");
} else if (result > 0) {
printf("前 5 个字符比较,第一个字符串大于第二个字符串");
} else {
printf("前 5 个字符比较,第一个字符串小于第二个字符串");
}
return 0;
}
3. strcpy()
strcpy() 函数复制一个字符串到另一个字符串。该函数会覆盖目标字符串中的所有字符。
#include
int main() {
char str1[] = "Hello world";
char str2[20];
strcpy(str2, str1);
printf("复制后的字符串:%s", str2);
return 0;
}
4. strncpy()
strncpy() 函数与 strcpy() 类似,但它只复制字符串的前 n 个字符到目标字符串(n 由第三个参数指定)。
#include
int main() {
char str1[] = "Hello world";
char str2[10];
strncpy(str2, str1, 5);
printf("复制后的字符串:%s", str2);
return 0;
}
5. strlen()
strlen() 函数返回一个字符串的长度(以字符数计算,不包括终止空字符)。
#include
int main() {
char str[] = "Hello world";
int length = strlen(str);
printf("字符串的长度:%d", length);
return 0;
}
6. strchr()
strchr() 函数在字符串中查找第一个指定的字符,并返回该字符的地址(如果找到)。如果找不到该字符,则返回 NULL。
#include
int main() {
char str[] = "Hello world";
char *p = strchr(str, 'o');
if (p != NULL) {
printf("找到字符 'o' 的位置:%d", p - str);
} else {
printf("没有找到字符 'o'");
}
return 0;
}
7. strrchr()
strrchr() 函数与 strchr() 类似,但它从字符串的末尾向开头查找指定的字符。如果找到该字符,则返回该字符的地址;如果找不到,则返回 NULL。
#include
int main() {
char str[] = "Hello world";
char *p = strrchr(str, 'l');
if (p != NULL) {
printf("找到字符 'l' 的位置:%d", p - str);
} else {
printf("没有找到字符 'l'");
}
return 0;
}
8. strstr()
strstr() 函数在字符串中查找第一个与指定的子串匹配的子串,并返回该子串的地址(如果找到)。如果找不到子串,则返回 NULL。
#include
int main() {
char str[] = "Hello world";
char *p = strstr(str, "world");
if (p != NULL) {
printf("找到子串 world 的位置:%d", p - str);
} else {
printf("没有找到子串 world");
}
return 0;
}
9. strtok()
strtok() 函数将字符串分成由分隔符分隔的多个子字符串(称为令牌)。该函数每次调用都会返回下一个令牌,直到没有更多令牌为止。NULL 作为第一个参数传递给后续调用以继续分隔相同的字符串。
#include
int main() {
char str[] = "This is a test string";
char *token = strtok(str, " ");
while (token != NULL) {
printf("令牌:%s", token);
token = strtok(NULL, " "); // 继续分隔相同的字符串
}
return 0;
}
10. strtok_r()
strtok_r() 函数与 strtok() 类似,但它使用可重入版本的分隔符字符指针。这有助于防止在多线程环境中使用 strtok() 时出现内存损坏问题。
#include
int main() {
char str[] = "This is a test string";
char *saveptr;
char *token = strtok_r(str, " ", &saveptr);
while (token != NULL) {
printf("令牌:%s", token);
token = strtok_r(NULL, " ", &saveptr); // 继续分隔相同的字符串
}
return 0;
}
11. memcmp()
memcmp() 函数比较两块内存,并返回一个整数,表示这两个块之间的比较结果。如果第一个块大于第二个块,则返回一个正整数;如果第一个块小于第二个块,则返回一个负整数;如果两个块相等,则返回 0。
#include
int main() {
char str1[] = "Hello world";
char str2[] = "Hello World";
int result = memcmp(str1, str2, sizeof(str1));
if (result == 0) {
printf("两块内存相等");
} else if (result > 0) {
printf("第一块内存大于第二块内存");
} else {
printf("第一块内存小于第二块内存");
}
return 0;
}
12. memcpy()
memcpy() 函数复制一块内存到另一块内存。该函数会覆盖目标内存中的所有字符。
#include
int main() {
char str1[] = "Hello world";
char str2[20];
memcpy(str2, str1, sizeof(str1));
printf("复制后的内存:%s", str2);
return 0;
}
13. memmove()
memmove() 函数与 memcpy() 类似,但它可以处理重叠的内存块。也就是说,它可以将内存从一个区域复制到另一个区域,即使它们重叠。
#include
int main() {
char str[] = "Hello world";
// 将字符串的第一个字符移动到字符串的末尾
memmove(str + strlen(str), str, 1);
printf("移动后的字符串:%s", str
2024-12-01
上一篇:C 语言数组元素逐行相乘输出
下一篇:C 语言计算函数值
Java数据成员深度解析:定义、分类、初始化与最佳实践
https://www.shuihudhg.cn/134447.html
Java方法编程:从基础语法到高级实践的全面指南
https://www.shuihudhg.cn/134446.html
PHP数组中文字符处理深度解析:存储、提取与优化实践
https://www.shuihudhg.cn/134445.html
PHP 数组截取深度解析:`array_slice` 函数的精髓与实战
https://www.shuihudhg.cn/134444.html
C语言换行输出深度解析:从基础``到高级技巧与跨平台考量
https://www.shuihudhg.cn/134443.html
热门文章
C 语言中实现正序输出
https://www.shuihudhg.cn/2788.html
c语言选择排序算法详解
https://www.shuihudhg.cn/45804.html
C 语言函数:定义与声明
https://www.shuihudhg.cn/5703.html
C语言中的开方函数:sqrt()
https://www.shuihudhg.cn/347.html
C 语言中字符串输出的全面指南
https://www.shuihudhg.cn/4366.html