不用指针实现strstr函数实现
时间: 2023-08-26 18:01:30 浏览: 116
可以通过两层循环遍历目标字符串和待查找的子字符串进行实现,具体代码如下:
```c
char* my_strstr(const char* str, const char* substr) {
int str_len = strlen(str);
int substr_len = strlen(substr);
for (int i = 0; i <= str_len - substr_len; i++) {
int j;
for (j = 0; j < substr_len; j++) {
if (str[i + j] != substr[j]) {
break;
}
}
if (j == substr_len) {
return (char*) (str + i);
}
}
return NULL;
}
```
在主循环中,通过i变量遍历目标字符串,确保剩余的长度足够容纳子字符串。然后,在内部循环中,使用j变量遍历子字符串,并逐个比较对应位置的字符。如果发现不匹配,则跳出内部循环。如果内部循环正常结束,说明找到了子字符串,返回其在目标字符串中的指针。如果主循环结束后没有找到子字符串,则返回NULL。
相关问题
strstr函数实现
strstr函数是C语言中的字符串处理函数,用于在一个字符串中搜索指定子串的第一次出现位置。
下面是一个简单的strstr函数实现示例:
```c
#include <stdio.h>
char* my_strstr(const char* str, const char* substr) {
if (!*substr) {
return (char*)str;
}
while (*str) {
const char* s1 = str;
const char* s2 = substr;
while (*s1 && *s2 && (*s1 == *s2)) {
s1++;
s2++;
}
if (!*s2) {
return (char*)str;
}
str++;
}
return NULL;
}
int main() {
const char* str = "Hello, World!";
const char* substr = "World";
char* result = my_strstr(str, substr);
if (result != NULL) {
printf("Substring found at index: %ld\n", result - str);
} else {
printf("Substring not found\n");
}
return 0;
}
```
在上述示例中,my_strstr函数接受两个参数:str表示要搜索的字符串,substr表示要搜索的子串。函数通过逐个比较字符的方式来搜索子串的第一次出现位置。如果找到了子串,则返回该位置的指针;否则返回NULL。
在main函数中,我们使用my_strstr函数来搜索字符串"Hello, World!"中的子串"World"。如果找到了子串,则打印出子串在原字符串中的索引;否则打印出"Substring not found"。
strstr 函数原型实现
`strstr` 函数是 C 语言标准库中的一个字符串处理函数,它的原型在 `string.h` 头文件中声明。这个函数用于在字符串中查找第一次出现的子串,并返回子串首次出现的位置的指针。如果未找到子串,则返回NULL指针。
函数原型如下:
```c
char *strstr(const char *str1, const char *str2);
```
参数说明:
- `str1`:目标字符串,`strstr` 函数会在这个字符串中查找 `str2`。
- `str2`:需要查找的子串。
返回值:
- 返回一个指向第一次出现 `str2` 的子串的指针,如果 `str2` 不是 `str1` 的子串,则返回NULL。
这个函数是大小写敏感的。
下面是一个简单的 `strstr` 函数实现示例:
```c
#include <stdio.h>
#include <string.h>
char *my_strstr(const char *str1, const char *str2) {
if (*str2 == '\0') {
return (char *)str1;
}
const char *p1 = str1;
const char *p2;
while (*p1) {
p2 = str2;
while (*p1 && *p2 && (*p1 == *p2)) {
p1++;
p2++;
}
if (!*p2) {
return (char *)str1;
}
str1++;
}
return NULL;
}
int main() {
const char *str = "Hello, world!";
const char *to_find = "world";
char *found = my_strstr(str, to_find);
if (found != NULL) {
printf("子串 '%s' 在 '%s' 中首次出现于位置: %ld\n", to_find, str, found - str);
} else {
printf("在 '%s' 中未找到 '%s'\n", str, to_find);
}
return 0;
}
```
在这个实现中,我们手动遍历 `str1` 来查找 `str2`,当找到 `str2` 的第一个字符时,再逐个比较后续的字符,直到发现不匹配的字符或者到达 `str1` 或 `str2` 的结尾。
阅读全文