我做了自己的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()
按值返回向量,然后调用两次(对于begin()
一次,对于end()
一次),这意味着您的两个迭代器不会指向同一容器。这根本行不通。然后,您第三次调用它来比较find
的结果,由于同样的原因,该结果也不正确。
您可以将其更改为:
auto tokens = st.getTokens();
if(find(tokens.begin(), tokens.end(), item) != tokens.end())
或者您可以从
const vector<string>&
返回getTokens()
。