比较两个字符串 return c++ 中的等效子字符串

Comparing two strings that return the equivalent substring in c++

我有一个接受两个字符串的函数 subString。我循环遍历我的第一个字符串以生成至少大小 >= 4 的子字符串。我想找到一个存在于我的第二个字符串中的子字符串。例如:

string1: "ABCDE" string2: "XYBCDEFGH"

string1 的子字符串包括:"ABCD""ABCDE""BCDE"

所以,我想比较生成的子字符串到 string2 和 return "BCDE"

我对如何比较这两个字符串感到困惑。我查看了 STL 字符串库 (https://www.cplusplus.com/reference/string/string/),但在寻找解决此问题的正确方法时遇到了困难。

#include <iostream>
#include <string> 

using namespace std;

void subString(string s1, string s2){
    int n = 4;
    int strLength = s1.length();
    string firstString;
    
    for (int i = 0; i < strLength; i++){
        for(int j = 1; j <= strLength - i; j++){
            if (s1.substr(i,j).length() >= n){
                firstString = s1.substr(i,j);
                cout << firstString << endl;
            }
        }
    }
}

int main()
{
    string s1;
    string s2;
    
    cin >> s1;
    cin >> s2;
    subString(s1, s2);
}

你可以

  1. Return 一个子串向量。
  2. 然后遍历向量并使用 find 在 s2 字符串中搜索 方法。

参见下面的代码示例。

#include <iostream>
#include <string> 
#include <vector>

using namespace std;

vector<string> subString(string s1, string s2){
    int n = 4;
    int strLength = s1.length();
    string firstString;
    vector<string> substrings;
    
    for (int i = 0; i < strLength; i++){
        for(int j = 1; j <= strLength - i; j++){
            if (s1.substr(i,j).length() >= n){
                firstString = s1.substr(i,j);
                substrings.push_back(firstString);
            }
        }
    }
    return substrings;
}

int main()
{
    string s1 = "ABCDE";
    string s2 = "XYBCDEFGH";

    for (auto value : subString(s1, s2))
    {
        if (s2.find(value) != string::npos)
            cout << "found " << value << endl;
    }
}

这段代码的输出

found BCDE