C++代码快速找到字符串中的第一个匹配项,助力编程难题解决
2023-09-15 03:11:02
LeetCode 28:字符串匹配难题
LeetCode 28题旨在测试您在C++编程语言中处理字符串匹配任务的能力。该问题如下:
给定两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从 0 开始)。如果needle不是haystack的一部分,则返回 -1。
为了帮助您更好地理解问题,这里提供一个示例:
haystack = "hello"
needle = "ll"
输出:2
在这个示例中,needle字符串"ll"在haystack字符串中第一个匹配项的下标是 2。
C++代码解决方案
我们为您精心准备了完整的C++代码解决方案,以便您轻松实现LeetCode 28题的目标。代码如下:
#include <iostream>
#include <string>
using namespace std;
int strStr(string haystack, string needle) {
// 判断needle字符串是否为空
if (needle.empty()) {
return 0;
}
// 遍历haystack字符串
for (int i = 0; i <= haystack.size() - needle.size(); i++) {
// 判断当前位置是否匹配needle字符串
if (haystack.substr(i, needle.size()) == needle) {
return i;
}
}
// 如果没有找到匹配项,返回 -1
return -1;
}
int main() {
// 获取用户输入的haystack和needle字符串
string haystack, needle;
cout << "Enter haystack string: ";
getline(cin, haystack);
cout << "Enter needle string: ";
getline(cin, needle);
// 调用strStr函数查找第一个匹配项的下标
int index = strStr(haystack, needle);
// 根据返回结果输出匹配项的下标或提示信息
if (index == -1) {
cout << "Needle string not found in haystack string." << endl;
} else {
cout << "First matching index: " << index << endl;
}
return 0;
}
代码讲解
现在,我们将逐步讲解C++代码的实现细节,帮助您深入理解其工作原理:
-
字符串匹配函数strStr的定义 :
int strStr(string haystack, string needle) { // ... }
这个函数接收两个字符串参数haystack和needle,返回needle字符串在haystack字符串中的第一个匹配项的下标。如果needle不是haystack的一部分,则返回 -1。
-
检查needle字符串是否为空 :
if (needle.empty()) { return 0; }
如果needle字符串为空,则意味着haystack字符串中没有任何匹配项。因此,我们直接返回 0,表示匹配项从下标 0 开始。
-
遍历haystack字符串 :
for (int i = 0; i <= haystack.size() - needle.size(); i++) { // ... }
我们使用一个循环来遍历haystack字符串。循环的条件是i <= haystack.size() - needle.size(),这是为了确保我们在遍历haystack字符串时不会超出范围。
-
判断当前位置是否匹配needle字符串 :
if (haystack.substr(i, needle.size()) == needle) { return i; }
在这个循环中,我们使用haystack.substr(i, needle.size())方法来获取haystack字符串从下标i开始的needle字符串大小的子字符串。然后,我们检查这个子字符串是否与needle字符串相等。如果相等,则说明我们找到了needle字符串的第一个匹配项,并立即返回下标i。
-
如果没有找到匹配项,返回 -1 :
return -1;
如果我们遍历完整个haystack字符串都没有找到needle字符串的匹配项,则返回 -1,表示needle字符串不是haystack字符串的一部分。
-
在main函数中获取用户输入并调用strStr函数 :
int main() { // ... int index = strStr(haystack, needle); // ... }
在main函数中,我们从用户获取haystack和needle字符串,然后调用strStr函数来查找第一个匹配项的下标。
-
根据返回结果输出匹配项的下标或提示信息 :
if (index == -1) { cout << "Needle string not found in haystack string." << endl; } else { cout << "First matching index: " << index << endl; }
最后,我们根据strStr函数返回的结果输出匹配项的下标或提示信息。
结语
希望这份技术指南对您有所帮助。请注意,本文中提供的C++代码仅供参考,您可能需要根据自己的具体情况进行修改或优化。如果您还有其他问题或需要更详细的解释,请随时提出。