不用指针实现strstr函数实现
时间: 2023-08-26 07:01:30 浏览: 123
可以通过两层循环遍历目标字符串和待查找的子字符串进行实现,具体代码如下:
```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语言中的字符串查找函数,它并不直接使用指针,而是用于在一个字符串中搜索指定子串第一次出现的位置。它的原型通常如下:
```c
char *strstr(const char *haystack, const char *needle);
```
这里的`haystack`是主字符串,`needle`是要查找的子串。该函数会从`haystack`开始逐字符搜索,如果找到`needle`的完整匹配,就会返回第一个匹配到`needle`的字符指针,指向`needle`在`haystack`中的位置;如果没有找到匹配,则返回`NULL`。
例如:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *result = strstr(str, "World");
if (result) {
printf("Substring 'World' found at position %ld\n", result - str);
} else {
printf("Substring not found.\n");
}
return 0;
}
```
在这个例子中,`strstr`会在`str`中查找子串"World",并打印出其起始位置。如果没有找到,就输出子串未找到的信息。
如何在MIPS上实现strstr函数
在 MIPS 上实现 strstr 函数需要使用指针来定位目标字符串和子字符串的位置,具体实现可以参考以下代码:
```
#include <stdio.h>
char *my_strstr(char *str1, char *str2) {
int len1, len2;
char *p1, *p2;
len1 = strlen(str1);
len2 = strlen(str2);
if (len1 < len2) return NULL;
for (p1 = str1; *p1; p1++) {
p2 = str2;
while (*p2 && (*p1 == *p2)) {
p1++;
p2++;
}
if (!*p2) return (p1 - len2);
p1 = p1 - (p2 - str2);
}
return NULL;
}
int main(void) {
char str1[] = "hello world";
char str2[] = "world";
printf("Result: %s\n", my_strstr(str1, str2));
return 0;
}
```
其功能是在 str1 中查找 str2,如果找到则返回 str2 在 str1 中的起始位置,否则返回 NULL。
阅读全文