Вы не проверяете, имеете ли вы доступ к действительному элементу в векторе.Так что, вероятно, вы выходите за пределы.Чтобы предотвратить это, замените конец вашего кода на:
cout << tokens.size() << " elements:"<<endl;
if (tokens.size()>1)
temp = tokens[1];
else temp = "Second element not found";
cout<<temp;
Кроме того, способ чтения команды прекратит чтение в первом разделителе пробела:
cin>>command; //entering "hello world" would cause command to be "hello"
Чтобы быть увереннымчто ваша строка не сокращается таким неожиданным образом, вы можете вместо этого использовать getline()
:
getline (cin,command);
Демо
Примечание: термин синтаксический анализ вводит в заблуждение.Я понял, что вы хотите извлечь только одно конкретное значение массива.Но если вы хотите объединить несколько векторных элементов в одну строку, вам нужно сделать немного больше.
string tmp;
for (auto const& x:tokens)
tmp += x+" ";
cout << tmp<<endl;