c语言strstr函数的用法
时间: 2023-10-03 10:08:34 浏览: 193
C语言中的strstr函数用于在一个字符串中查找指定的子字符串,并返回其在原字符串中的位置。其函数原型如下:
```c
char *strstr(const char *haystack, const char *needle);
```
其中,haystack表示要查找的字符串,needle表示要查找的子字符串。函数返回一个指向第一个匹配子字符串的字符的指针,如果未找到匹配,则返回NULL。
例如,下面的代码演示了如何使用strstr函数查找字符串中的子字符串:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "hello world";
char *subStr = "world";
char *result = strstr(str, subStr);
if (result != NULL)
{
printf("子字符串在原字符串中的位置为:%d\n", result - str);
}
else
{
printf("未找到子字符串!\n");
}
return 0;
}
```
输出结果为:
```
子字符串在原字符串中的位置为:6
```
相关问题
c语言strstr函数的使用
strstr函数是C语言中的一个字符串处理函数,用于在一个字符串中查找另一个字符串的第一次出现位置,并返回该位置的指针。
使用方法如下:
```c
char *strstr(const char *str1, const char *str2);
```
其中,str1是被搜索的字符串,str2是要查找的子串。
函数返回值为指向第一次出现的子串的指针,如果未找到子串,则返回NULL。
以下是一个使用strstr函数的示例代码:
```c
#include<stdio.h>
#include<string.h>
int main() {
char arr1[] = "abcdeqabcdef";
char arr2[] = "cdef";
char* ret = strstr(arr1, arr2);
if (NULL == ret) {
printf("找不到子串\n");
} else {
printf("%s\n", ret);
}
return 0;
}
```
运行结果为:
```
cdef
```
以上示例中,arr1为被搜索的字符串,arr2为要查找的子串"cdef"。通过strstr函数在arr1中查找arr2,最终找到了子串"cdef"并返回了指向该子串的指针。
请用C语言实现strstr函数,至少使用两种方法
方法1:暴力匹配
```c
char* my_strstr(char* haystack, char* needle) {
if (!*needle) return haystack;
char* p1 = haystack;
while (*p1) {
char* p1_begin = p1, *p2 = needle;
while (*p1 && *p2 && *p1 == *p2) {
p1++;
p2++;
}
if (!*p2) return p1_begin;
p1 = p1_begin + 1;
}
return NULL;
}
```
方法2:KMP算法
```c
void compute_prefix(char* pattern, int* prefix) {
int i = 1, j = 0;
prefix[0] = 0;
while (pattern[i]) {
if (pattern[i] == pattern[j]) {
j++;
prefix[i] = j;
i++;
} else if (j > 0) {
j = prefix[j - 1];
} else {
prefix[i] = 0;
i++;
}
}
}
char* my_strstr(char* haystack, char* needle) {
if (!*needle) return haystack;
int n = strlen(haystack), m = strlen(needle);
int prefix[m];
compute_prefix(needle, prefix);
int i = 0, j = 0;
while (i < n) {
if (haystack[i] == needle[j]) {
i++;
j++;
} else if (j > 0) {
j = prefix[j - 1];
} else {
i++;
}
if (j == m) return haystack + i - m;
}
return NULL;
}
```
阅读全文