<string.h>函数中的strstr的实现
时间: 2024-02-05 09:11:17 浏览: 69
strstr函数用于在一个字符串中查找一个子字符串,并返回第一次出现该子字符串的地址。其实现大致如下:
```c
char *strstr(const char *haystack, const char *needle) {
size_t needle_len = strlen(needle);
if (needle_len == 0) {
return (char *)haystack;
}
while (*haystack) {
if (strncmp(haystack, needle, needle_len) == 0) {
return (char *)haystack;
}
++haystack;
}
return NULL;
}
```
以上实现中,首先计算出needle的长度,如果长度为0则直接返回haystack的地址。接下来在while循环中,每次比较haystack和needle的前needle_len个字符,如果相等则返回haystack的地址。如果循环结束还没有找到needle,则返回NULL。
需要注意的是,由于该函数返回的是指向haystack中某个位置的指针,因此需要将返回值强制转换为char *类型。
相关问题
敏感词检测——敏感词出现的次数和位置 运用<iostream> 和<string.h>头文件和strstr函数,输出敏感词位置和出现次数
好的,那我可以为您提供一个基于 `<iostream>` 和 `<string.h>` 头文件和 `strstr` 函数的敏感词检测的代码示例,可以实现敏感词出现的次数和位置的获取,并输出敏感词的位置和出现次数:
```c++
#include <iostream>
#include <string.h>
using namespace std;
// 定义敏感词库
const char* sensitiveWords[] = {"敏感词1", "敏感词2", "敏感词3", "敏感词4"};
// 敏感词检测函数
void sensitiveWordCheck(const char* text)
{
int textLen = strlen(text);
for (int i = 0; i < sizeof(sensitiveWords)/sizeof(char*); i++)
{
const char* p = text;
int count = 0;
while ((p = strstr(p, sensitiveWords[i])) != NULL)
{
count++;
cout << "敏感词:" << sensitiveWords[i] << ",位置:" << p - text << ",次数:" << count << endl;
p += strlen(sensitiveWords[i]);
}
}
}
int main()
{
const char* text = "这是一段包含敏感词1和敏感词2的文本,敏感词1出现了两次。";
sensitiveWordCheck(text);
return 0;
}
```
以上代码中,在敏感词检测函数 `sensitiveWordCheck` 中,我们使用了 `strstr` 函数进行字符串匹配,同时通过一个 `while` 循环统计敏感词在文本中的出现次数。统计完成后,我们输出敏感词的位置和出现次数。在 `main` 函数中,我们定义了一个待检测的文本 `text`,并调用 `sensitiveWordCheck` 函数进行敏感词检测和输出。
#include <string.h>中包含哪些函数
在 C 语言中,头文件 string.h 中包含了一些字符串操作的函数,包括:
1. strlen:计算字符串的长度
2. strcat:连接两个字符串
3. strcpy:将一个字符串复制到另一个字符串
4. strncpy:将一个字符串的一部分复制到另一个字符串
5. strcmp:比较两个字符串
6. strncmp:比较两个字符串的一部分
7. strchr:在字符串中查找一个字符
8. strstr:在字符串中查找一个子字符串
9. strtok:将字符串分割成多个子字符串
10. memset:将一段内存设置为固定的值
11. memcpy:将一段内存复制到另一段内存
12. memmove:将一段内存移动到另一段内存
阅读全文