35-c语言字符串查找字符串
C语言字符串查找主要通过标准库函数实现:
strstr用于查找子字符串的首次出现(返回指向匹配起始位置的指针),strchr用于查找字符的首次出现,strrchr用于查找字符的最后一次出现;如需自定义逻辑,可手动实现双指针匹配算法(如遍历主字符串并逐字符比较子串)。所有操作均需包含<string.h>头文件,注意处理空字符串和未找到的情况(返回NULL)。
在C语言中,字符串查找是常见的操作,主要通过标准库函数实现。
1. 使用strstr函数查找子字符串
strstr是C标准库中用于在字符串中查找子字符串的函数。
函数原型
char *strstr(const char *str, const char *substr);
用法说明
- 在
str中查找substr的首次出现 - 如果找到,返回指向子字符串起始位置的指针
- 如果未找到,返回NULL
示例代码
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *substr = "World";
char *pos = strstr(str, substr);
if (pos != NULL) {
printf("子字符串 '%s' 在字符串中找到,位置: %ld\n", substr, pos - str);
printf("从找到位置开始的字符串: %s\n", pos);
} else {
printf("子字符串 '%s' 未找到\n", substr);
}
return 0;
}
2. 使用strchr函数查找单个字符
strchr用于在字符串中查找指定字符的第一个匹配项。
函数原型
char *strchr(const char *str, int c);
用法说明
- 在
str中从左到右查找字符c - 返回指向第一个匹配字符的指针
- 如果未找到,返回NULL
示例代码
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char c = 'o';
char *pos = strchr(str, c);
if (pos != NULL) {
printf("字符 '%c' 在字符串中找到,位置: %ld\n", c, pos - str);
printf("从找到位置开始的字符串: %s\n", pos);
} else {
printf("字符 '%c' 未找到\n", c);
}
return 0;
}
3. 使用strrchr函数查找单个字符的最后一次出现
strrchr用于在字符串中查找指定字符的最后一次匹配项。
函数原型
char *strrchr(const char *str, int c);
用法说明
- 在
str中从右到左查找字符c - 返回指向最后一个匹配字符的指针
- 如果未找到,返回NULL
示例代码
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char c = 'o';
char *pos = strrchr(str, c);
if (pos != NULL) {
printf("字符 '%c' 在字符串中最后一次出现的位置: %ld\n", c, pos - str);
printf("从找到位置开始的字符串: %s\n", pos);
} else {
printf("字符 '%c' 未找到\n", c);
}
return 0;
}
4. 手动实现字符串查找
如果需要自己实现字符串查找功能,可以使用双指针滑动匹配法。
手动实现strstr的示例
#include <stdio.h>
char *my_strstr(const char *str, const char *substr) {
if (*substr == '\0') {
return (char *)str; // 空字符串总是匹配
}
while (*str != '\0') {
const char *s = str;
const char *p = substr;
while (*s != '\0' && *p != '\0' && *s == *p) {
s++;
p++;
}
if (*p == '\0') {
return (char *)str; // 找到匹配
}
str++;
}
return NULL; // 未找到匹配
}
int main() {
char str[] = "Hello, World!";
char *substr = "World";
char *pos = my_strstr(str, substr);
if (pos != NULL) {
printf("子字符串 '%s' 在字符串中找到,位置: %ld\n", substr, pos - str);
} else {
printf("子字符串 '%s' 未找到\n", substr);
}
return 0;
}
5. 选择适合的查找方法
- 查找子字符串(如"World"):使用
strstr - 查找单个字符(如'o'):使用
strchr(首次出现)或strrchr(最后一次出现) - 需要自定义查找逻辑:手动实现
注意事项
- 所有字符串操作函数都要求字符串以
\0结束 - 使用
strstr查找时,如果子字符串为空,会返回原字符串指针 - 当使用指针比较位置时,应使用
pos - str计算偏移量 - 在使用返回的指针时,要确保它不为NULL
这些函数都定义在string.h头文件中,使用前需要包含该头文件。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

