最全解析: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 语言计算函数值