Невозможно напечатать первый элемент строки - PullRequest
0 голосов
/ 08 марта 2020

Я преобразую строку в целое число, а затем перехожу к вектору, а затем печатаю его, но первый элемент строки не печатается.

#include <sstream>
#include <vector>
#include <iostream>
using namespace std;

vector<int> parseInts(string str) {
       stringstream ss(str);
       vector<int> my;
       char ch;
       int num;
       while(ss.good()){
           string substr;
           getline(ss, substr, ',');
           ss >> num;
           my.push_back(num);
       }
       return my;
}

int main() {
    string str;
    cin >> str;
    vector<int> integers = parseInts(str);
    for(int i = 0; i < integers.size(); i++) {
        cout << integers[i] << "\n";
    }

    return 0;
}

i am converting a string to integer and then passes to a vector and then print it but the first element of the string is not get printed

1 Ответ

2 голосов
/ 08 марта 2020

Основной проблемой является строка ss >> num. Сначала мы начнем с 1,2,3,4,5 в потоке. getline(ss, substr, '\n') читает первое число из потока (1) и избавляется от разделителя ,. Затем ss >> num читает следующее число (2), но сохраняет следующее , в потоке, потому что отформатированный оператор >> считывает только столько символов, которые допустимы для типа, в который он читается. Таким образом, вы выбросили 1, который был сохранен внутри substr, и вставили 2 в вектор.

Таким образом, поток в этой точке равен ,3,4,5 во второй итерации l oop. getline читает пустую строку в substr (потому что перед , нет номера) и избавляется от разделителя ,, а ss >> num читает 3. Это повторяется до тех пор, пока весь поток не будет прочитан: getline постоянно читает пустую строку и ss >> num читает целое число.

Решение состоит в том, чтобы избавиться от строки ss >> num и преобразовать substr в целое число с std::stoi. Кроме того, для корректности необходимо ввести операцию ввода в состояние while l oop. Таким образом, l oop вводится после проверки успешности операции ввода.

std::string substr;
while (getline(ss, substr, ',')) {
  my.push_back(std::stoi(substr));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...