这也没返回字串的位置啊
时间: 2024-11-18 20:16:18 浏览: 18
你说得对,上面提供的代码确实没有直接返回子串在原字符串中的位置。如果你想获取子串首次出现的确切位置,可以在发现子串时记录下当前索引,然后返回该索引。修改后的代码示例如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
// 添加一个整数变量来存储子串的开始位置
int subStrPos = 0;
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) {
subStrPos = i; // 找到子串时更新位置
return true;
}
}
return false;
}
void printSubstringPosition(char *str1, char *str2) {
if (isSubstring(str1, str2)) {
printf("子串 '%s' 首次出现在原字符串 '%s' 的位置: %d\n", str2, str1, subStrPos);
} else {
printf("子串 '%s' 没有在原字符串 '%s' 中找到\n", str2, str1);
}
}
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';
printSubstringPosition(str1, str2);
return 0;
}
```
现在当找到子串时,`subStrPos` 变量将记录首次出现的位置,并在 `printSubstringPosition` 函数中打印出来。
阅读全文