不要用strstr函数
时间: 2024-11-02 14:08:42 浏览: 11
如果你不想使用 `strstr()` 函数,可以手动遍历字符串并逐个比较字符来查找子串。以下是不使用 `strstr()` 的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> // 用于 bool 类型
bool isSubstring(char *str1, char *str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
// 如果子串长度大于原字符串长度,不可能找到
if (len2 > len1)
return false;
for (int i = 0; i <= len1 - len2; i++) {
bool found = true;
for (int j = 0; j < len2; j++) {
if (str1[i + j] != str2[j]) {
found = false;
break;
}
}
if (found)
return true;
}
return false;
}
int main() {
char str1[101], str2[101];
// 获取输入
fgets(str1, sizeof(str1), stdin);
fgets(str2, sizeof(str2), stdin);
// 去除换行符
str1[strcspn(str1, "\n")] = '\0';
str2[strcspn(str2, "\n")] = '\0';
bool hasSubstring = isSubstring(str1, str2);
if (hasSubstring) {
printf("%d\n", 0); // 子串在原字符串开头,相对位置为0
} else {
printf("-1\n");
}
return 0;
}
```
这个版本的代码定义了一个名为 `isSubstring` 的函数,它会检查 `str2` 是否作为连续的子串存在于 `str1` 中。外部 `main` 函数通过调用 `isSubstring` 来判断,并输出相应结果。请注意,这种方法效率较低,因为需要逐个字符对比,所以对于较大的字符串可能会更慢。
阅读全文