【发布时间】: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; }