【问题标题】:Problems with Vector to Vector String Comparison Search向量到向量字符串比较搜索的问题
【发布时间】:2013-09-10 21:43:09
【问题描述】:

我有一个算法应该比较两个单独向量中的字符串并比较第一个向量文件的内容:fileContent 和 fileContent1。如果有字符串匹配,程序应打印出第一个向量的每一行,并报告向量二中是否有匹配的行(如果是这种情况,则打印出“YES:”Vector1 行或“No”Vector1 行)目前我的输出是这样的,我似乎无法弄清楚我做错了什么。任何提示或帮助将不胜感激。

我现在的输出:

NO:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:altimbankery
YES:loessoid
NO:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:loessoid
YES:stampede
YES:stampede
NO:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:stampede
YES:soger
YES:soger
YES:soger
NO:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:soger
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
NO:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:Plutarchical
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
NO:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:gigglesome
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
NO:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:unheated
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
NO:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:offendress
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
NO:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:syruper
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
NO:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:multispindle
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
NO:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:stinging
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
NO:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:Euspongia
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
NO:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:recluse
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
NO:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:continuum
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
NO:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:promotrix
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
NO:menyie
YES:menyie
YES:menyie
YES:menyie
YES:menyie
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
NO:perpetuator
YES:perpetuator
YES:perpetuator
YES:perpetuator
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
YES:hornblower
NO:hornblower
YES:hornblower
YES:hornblower
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
YES:kurung
NO:kurung
YES:kurung
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
YES:inductionally
NO:inductionally

file1 的内容:

unheated
rheometer
daemonurgy
maltase
morrowless
Plutarchical
czarism
missable
loessoid
siphonozooid
saltimbankery
unreduced
loglike
stampede
clickless
soger
gigglesome
vila

file2 的内容:

saltimbankery
loessoid
stampede
soger
Plutarchical
gigglesome
unheated
offendress
syruper
multispindle
stinging
Euspongia
recluse
continuum
promotrix
menyie
perpetuator
hornblower
kurung
inductionally

算法:

if(algo_speed == "slow")
{
    i = 0;

    while(getline(ifs1, line))
    {
        fileContent1.push_back(line);
        fileContent.push_back(line);
    }

    for(size_t i = 0; i < fileContent1.size() ; i++)
    {
        for(size_t j = 0; j < fileContent.size() ; j++)
        {
            size_t found = fileContent[i].find(fileContent1[j]);
            if(found) {
                cout << "YES:" << fileContent.at(i) << endl;
            } else {
                cout << "NO:" << fileContent.at(i) << endl;
            }

            //sort(fileContent1.begin(), fileContent1.end());
        }
    }
}

【问题讨论】:

  • 您真的希望有人会阅读该输出吗?哈哈
  • 您将 i 从 0 计数到 fileContent1.size(),但将其用作 fileContent 的索引。使用正确的变量名来防止这些错误。 std::string::find 如果找不到匹配项,则返回 npos。这通常会转换为true,而不是false。同样,如果它在序列的开头找到匹配项,它将返回 0,隐式转换为 false

标签: c++ algorithm vector find compare


【解决方案1】:

您的问题并不完全清楚。我知道您希望第一个文件中的每个单词都有一行输出。在这种情况下,您在错误的循环中执行输出阶段。您应该在外部循环中执行此操作,而不是内部循环。对于内部循环,您只需循环直到找到。

您遇到的另一个问题是期望 string::find 返回一个布尔值。这不是真的。它返回一个索引,如果没有找到,则返回 string::npos。您可以改用字符串相等运算符。

因此,使用上述建议,您的代码变为:

for(size_t i = 0; i < fileContent.size() ; i++)
{
    bool found = false;
    for(size_t j = 0; j < fileContent1.size() && !found; j++)
    {
        found = fileContent[i] == fileContent1[j];
    }

    if(found) {
        cout << "YES:" << fileContent.at(i) << endl;
    } else {
        cout << "NO:" << fileContent.at(i) << endl;
    }
}

当然,如果你在向量上使用std::find,你可以完全避免内部循环。

bool found = std::find(fileContent1.begin(), fileContent1.end(), fileContent[i]) != fileContent1.end();

【讨论】:

    【解决方案2】:

    在您的向量 2 上使用 std::find。 你应该轻松​​解决这个问题

    std::for_each(vector1.cbegin(),vector1.cend(), [&](const std::string &s)->void{
        auto it=std::find_if(vector2.cbegin(),vector2.cend(), 
            [&](const std::string & s2)-> bool{
            return s2==s1;
        }
        std::cout<<(it==vector2.cend() ? "NO ":"YES "<<s;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多