首页 > 解决方案 > C++ 合并重叠字符串

问题描述

假设我有字符串 A:“info_mesh”,我想将它添加到字符串 B:“mesh_foo”。

但是,我想要字符串“info_mesh_foo”,而不是字符串“info_meshmesh_foo”。

我不能只说:

std::string A = "randomstuffoverlap", B = "overlapwithmorestuff"
std::string C = A + B;

因为我最终会得到:

C = "randomstuffoverlapoverlapwithmorestuff",

当我想要时:

C = "randomstuffoverlapwithmorestuff"

没有提到两次的“重叠”,就好像创建的字符串有两个字符串的“网格”。

但是,如果:

std::string A = "juststuff", B = "unrelatedstuff", C;
//std::string C should be made equal to "juststuffunrelatedstuff".

(所以它们之间没有共享子字符串)

我该怎么做呢?提前致谢。

标签: c++visual-c++

解决方案


这花了我一段时间,但我有这个功能:

string overlapjoin(string a, string b) {
    for (long long x = (b.length()<= a.length())? b.length(): a.length(); x > 0; --x)
        if (a.substr(a.length() - x, a.length() - 1) == b.substr(0, x))
            return(a.substr(0, a.length() - x) + b);
    return(a + b);
}

如果您想限制共享字符,也可以表示为:

string overlapjoin(string a, string b, int maxlength) {
    for (long long x = maxlength; x > 0; --x)
        if (a.substr(a.length() - x, a.length() - 1) == b.substr(0, x))
            return(a.substr(0, a.length() - x) + b);
    return(a + b);
}

推荐阅读