我已经制作了自己的 StringTokenizer 类:
class StringTokenizer {
private:
vector<string> tokens; //output
string strIn; //input
public:
StringTokenizer(string strIn) {
this->strIn = strIn;
string str(strIn);
string tmpstr;
stringstream ss(str);
while(ss >> tmpstr)
tokens.push_back(tmpstr);
}
vector<string> getTokens() {
return tokens;
}
}
我有我的主要功能
int main() {
string str = "a b c d";
StringTokenizer st(str);
if(find(st.getTokens().begin(), st.getTokens().end(), item) != st.getTokens().end()) {
cout << "found";
} else {
cout << "not found";
}
}
当函数返回 true 时,一切正常。否则程序崩溃。我做错了什么?
最佳答案
您的代码中有未定义的行为,getTokens()
通过 value 返回一个 vector ,你调用它两次(一次为 begin()
,一次为 end()
)这意味着你的两个迭代器不指向同一个容器。这根本行不通。然后,您第三次调用它来比较 find
的结果出于同样的原因,这也是不正确的。
您可以通过将其更改为轻松解决此问题:
auto tokens = st.getTokens();
if(find(tokens.begin(), tokens.end(), item) != tokens.end())
或者您可以返回 const vector<string>&
来自 getTokens()
.
关于c++ - 在自己的 StringTokenizer 创建的 vector 中找到一个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45662708/