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 &s, const vector<string> &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 ++中不同行或列旁边的矩阵中搜索最小值和最大值的最快方法是啥