文字列の区切り文字 "、"をトークン化するコードを書いていました。ベクトル上の配列添字演算子
void Tokenize(const string& str, vector<string>& tokens, const string& delimeters)
{
// Skip delimiters at beginning.
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
// Find first "non-delimiter".
string::size_type pos = str.find_first_of(delimiters, lastPos);
while (string::npos != pos || string::npos != lastPos)
{
// Found a token, add it to the vector.
tokens.push_back(str.substr(lastPos, pos - lastPos));
// Skip delimiters. Note the "not_of"
lastPos = str.find_first_not_of(delimiters, pos);
// Find next "non-delimiter"
pos = str.find_first_of(delimiters, lastPos);
}
}
int main()
{
string str;
int test_case;
cin>>test_case;
while(test_case--)
{
vector<string> tokens;
getline(cin, str);
Tokenize(str, tokens, ",");
// Parsing the input string
cout<<tokens[0]<<endl;
}
return 0;
}
実行中にセグメンテーション違反が発生します。私はそれをデバッグするときのライン
cout<<tokens[0]<<endl
はcplusplus.comで、それはベクトル
プログラムを実行すると、 'tokens'に要素がありますか?そうでなければ、アクセスされるインデックス「0」の要素は存在しない。 –
Vector <>で内部的にまだ作成されていないメモリにアクセスしている可能性があります。これは、あなたがベクトルのインスタンスに何かをプッシュするときに発生します。 – ScarletAmaranth