Разбор вектора <string>в строку - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь токенизировать строку.Строки, над которыми я работаю, имеют следующий формат:

name,city,major,color,hobbies,age. 

Для этого я использую приведенный ниже код.И темп это строка.

    cin>>command;
    vector <string> tokens;
    stringstream check(command);
    string middle;
    while(getline(check, intermediate, ','))
    {
        tokens.push_back(intermidiate);
    }
    for(int i = 0; i<tokens.size(); i++)
    {
        cout << tokens[i] <<endl;

    }
    temp = tokens[1];
    cout<<temp; 

И я пытаюсь разобрать вектор строки в строку, но моя программа падает, когда я пытаюсь это сделать ...

Есть ли способ разбить его на одну строку или я должен попробовать что-то еще полностью?

1 Ответ

0 голосов
/ 24 октября 2018

Вы не проверяете, имеете ли вы доступ к действительному элементу в векторе.Так что, вероятно, вы выходите за пределы.Чтобы предотвратить это, замените конец вашего кода на:

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; 
...