c ++在字符串向量中搜索字符串

Posted

技术标签:

【中文标题】c ++在字符串向量中搜索字符串【英文标题】:c++ search for string in an vector of strings 【发布时间】: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; 【参考方案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。

【讨论】:

以上是关于c ++在字符串向量中搜索字符串的主要内容,如果未能解决你的问题,请参考以下文章

返回一个空向量c ++ [重复]

C++ 恢复/传递一个向量(在标题中调用啥?)

C++ 大向量搜索项

在c ++中不同行或列旁边的矩阵中搜索最小值和最大值的最快方法是啥

如何检查指向C ++中有效地址的std :: next(x)?

在文件中搜索字符串 (C)