6-2 字符串匹配 - C/C++ 数组及字符串 分数 10 作者 海洋饼干叔叔 单位 重庆大学 函数findSubStr()用于从以0结尾的字符数组s中查找其子串s1的位置,如果找到,返回起始下标,否则返回-1。 int findSubStr(char s[], char s1[]); 举例:字符串'tri'在字符串'string'中的起始下标为1;在字符串'tom&jerry'中找不到子串'jack',函数应返回-1。 请定义上述findSubStr()函数,使得下述程序可以运行并产生正确的执行
时间: 2024-03-26 19:34:05 浏览: 66
完整代码如下:
```c++
#include<iostream>
using namespace std;
int findSubStr(char s[], char s1[]) {
int i = 0, j = 0, pos = -1;
while (s[i] != '\0' && s1[j] != '\0') {
if (s[i] == s1[j]) { // 如果匹配成功,继续比较下一个字符
i++;
j++;
} else { // 如果匹配失败,回退到上一个匹配的位置的下一个位置
i = i - j + 1;
j = 0;
}
}
if (s1[j] == '\0') { // 如果s1已经匹配到结尾,说明匹配成功
pos = i - j;
}
return pos;
}
int main() {
char s[100], s1[100];
cin >> s >> s1;
int pos = findSubStr(s, s1);
if (pos == -1) {
cout << "未找到子串" << s1 << endl;
} else {
cout << s1 << "在" << s << "中的起始下标为" << pos << endl;
}
return 0;
}
```
函数 findSubStr() 的作用是在以 0 结尾的字符数组 s 中查找其子串 s1 的位置,如果找到,返回起始下标,否则返回 -1。具体实现是使用双指针 i 和 j 分别遍历 s 和 s1,如果匹配成功,继续比较下一个字符,否则回退到上一个匹配的位置的下一个位置。最后如果 s1 已经匹配到结尾,说明匹配成功,返回起始下标;否则说明匹配失败,返回 -1。
阅读全文