【问题描述】编写C/C++程序,实现蛮力字符串匹配 【输入形式】文本串和模式串(分开输入) 【输出形式】匹配成功,输出模式首字符对应文本的字符下标(从0开始);失败输出-1 同时输出字符比较次数 【样例输入】0001000000(文本) 100(模式) 【样例输出】3 6 (成功案例: 即匹配位置与比较次数,中间用空格隔开)
时间: 2024-03-05 12:52:46 浏览: 12
好的,以下是一个简单的 C++ 实现,可以实现蛮力字符串匹配,同时输出比较次数和匹配位置:
```c++
#include <iostream>
#include <cstring>
using namespace std;
int bruteForceMatch(string text, string pattern) {
int n = text.size(), m = pattern.size();
int compareCount = 0; // 统计字符比较次数
for (int i = 0; i <= n - m; i++) {
int j = 0;
for (; j < m; j++) {
compareCount++;
if (text[i + j] != pattern[j]) break;
}
if (j == m) return i; // 匹配成功,返回匹配位置
}
return -1; // 匹配失败,返回 -1
}
int main() {
string text, pattern;
cin >> text >> pattern;
int pos = bruteForceMatch(text, pattern);
if (pos != -1) {
cout << pos << " ";
}
cout << "比较次数:" << text.size() * pattern.size() << endl;
return 0;
}
```
在这个实现中,我们首先使用 `cin` 输入了文本串和模式串。然后,我们调用 `bruteForceMatch` 函数进行匹配,该函数返回匹配的位置,如果匹配失败则返回 -1。在 `bruteForceMatch` 函数中,我们使用两个循环对主串和模式串进行比较,统计字符比较次数。最后,我们输出匹配位置和比较次数。
注意,这里的匹配位置是从 0 开始计算的,与题目要求一致。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)