【问题标题】:Return the longest common Substring Function c ++返回最长公共子串函数 c++
【发布时间】:2018-11-28 02:12:42
【问题描述】:
string longest_common_Substring(string a, string b) {

string best = ""; 
string subString = ""; 
//vector < vector<int>> s[a.length]; 

int max = a.length() + b.length(); 


for (int i = 0; i <= a.length(); i++)
{
    for (int k = 0; k <= b.length() -i - 1; k++)
    {
        subString = a.substr(i, k);
        if (b.find(subString)== true && subString.length() > best.length())
        {
            best = subString;
        }
    }

}

return best; }

我的示例输入是longest_common_Substring("the rain", " in spain"),输出是"in"。正确的输出是“ain”

【问题讨论】:

标签: c++ substring c-strings


【解决方案1】:

您应该更改您的if 条件。 string::find 返回找到的字符串的位置,如果没有找到字符串,则返回 string::nposstring::find 不适用于 truefalsetrue 转换为 1。因此,b.find(subString)== true 只有在 subString 位于 b 的位置 1 时才为真。您可以使用

验证此行为
#include <iostream>
#include <string>

int main() {
    std::string a = "Text";

    if (a.find("Text") == true) std::cout << 1 << std::endl;
    if (a.find("ext") == true) std::cout << 2 << std::endl;
    if (a.find("xt") == true) std::cout << 3 << std::endl;
    if (a.find("t") == true) std::cout << 4 << std::endl;
    return 0;
}

输出为2

试试

b.find(subString) != b.npos

解决您的问题。

【讨论】:

  • 我添加了一个代码来验证我的声明。如果我的解释有误,请纠正我。
  • Only 1 is converted to true - 更正,除了 0 以外的任何东西都是真的。
  • 为什么我的代码示例的结果是234 也不行吗?为什么问题中的代码结果是in 而不是ain
  • 因为你有它倒退。在这个特定的转换中,true 被转换为 1。
  • 谢谢,这就解释了。
猜你喜欢
  • 2014-04-14
  • 2016-06-03
  • 2010-11-28
  • 2012-11-23
  • 1970-01-01
  • 2014-07-20
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多