我已经创建了自己的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时,一切正常。否则程序崩溃了。我做错了什么?
答案 0 :(得分:4)
您的代码中有未定义的行为,getTokens()
会按值返回一个向量,然后您调用两次(一次用于begin()
,一次用于end()
)这意味着你的两个迭代器不指向同一个容器。这只是行不通。然后,你称之为第三时间来比较find
的结果,由于同样的原因,这也是不正确的。
您可以通过将其更改为:
轻松解决此问题auto tokens = st.getTokens();
if(find(tokens.begin(), tokens.end(), item) != tokens.end())
或者您可以从const vector<string>&
返回getTokens()
。