【问题标题】:c++ search for string in an vector of stringsc ++在字符串向量中搜索字符串
【发布时间】:2021-04-18 18:01:33
【问题描述】:

我正在做一个项目来阅读上下文无关语法并表示它 1.Vectorial,2.分支链表,3.数组(表)。我遇到了字符串比较的问题。当我从键盘读取代表生产规则右侧的字符串时,我想检查该字符串是否存在于字符串向量中。问题是比较不正常。如果我比较的字符串是字符串向量中的第一个字符串,则比较工作正常。但是,如果我比较的字符串是来自字符串向量的字符串,而不是第一次比较不起作用,就好像该字符串不是来自字符串向量。对不起我的英语不好。我最好让代码解释一下

bool is(string &s, vector<string> &v) {
    for (auto i : v) {
        return (i.compare(s)==0) ? true : false;
    }
}

此函数仅在 s=v[0] 时返回 true,否则即使 s=v[2] 也返回 false

【问题讨论】:

  • is 总是在第一次循环迭代中返回。
  • 您能否edit 您的问题满足minimal reproducible example 的所有要求,如help center 中所述?请参阅How to Ask 了解更多信息。直到每个人都可以获取您的 minimal reproducible example,然后剪切并粘贴它完全如图所示,运行它并重现您的结果,否则任何人都不太可能知道你什么。
  • 让我们只使用 is 函数。如果 s = v[0] 我的函数返回 true。如果 s 是其他任何东西,即使 s=v[2] 我的函数也返回 false
  • 注意std::find的存在。而[some conditional expression] ? true : false 总是多余的。
  • 它会起作用,除非你总是在第一次通过时返回 ferm 循环。返回不是有条件的,因此它总是返回数组第一项的比较。把函数改成bool is(const string &amp;s, const vector&lt;string&gt; &amp;v) { for (auto i : v) { if(i.compare(s)==0) return true; } return false; }

标签: c++ string vector


【解决方案1】:

为此,您必须使用 for 循环进入向量并比较其中的每个字符串,如下所示:

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

using namespace std;

bool doExists(string s, vector<string> v) {
    for (int i=0;i<v.size();i++) {
        if (s.compare(v[i]) == 0) {
            return true;
        }
    }
    return false;
}

int main(){
    vector<string> phrases = {"Hello!", "I like potatos!","I like fries.","How are you today?","I'm good.","Hello!"};
    int helloLocated = doExists("Hello!", phrases);
    cout << helloLocated;
}

控制台会打印 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    相关资源
    最近更新 更多