Как добавить числа из строки в вектор c++

Рейтинг: 0Ответов: 3Опубликовано: 13.05.2023

Дана строка состоящая из чисел, разделенных пробелом, например: 3, 5, 2, 7, 125. Как можно все эти числа добавить в вектор c++. Проще говоря альтернатива методу .split() в питоне.

Ответы

▲ 3Принят

Та же идея, что в ответе @Harry, но более коротка запись:

#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>

int main()
{
    std::string s = "1 2 3";

    std::istringstream ss(s);
    std::vector<int> vec(std::istream_iterator<int>(ss), {});

    for (int x : vec)
        std::cout << x << '\n'; // 1 2 3
}
▲ 4

Ну, например, так :)

int main(int argc, char * argv[])
{
    string s{"3 5 2 7 125"};
    vector<int>v;

    istringstream is(s);
    copy(istream_iterator<int>(is),
         istream_iterator<int>(),
         back_inserter(v));

    for(auto i:v) cout << i << " ";
}
▲ 0
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

int main()
{
    
    ifstream fin("task.txt"); //открыли файл
    vector<int> v; 
    if (fin.is_open())
    {
        string str;
        getline(fin, str); //считали строку из файла в str
        stringstream ss(str); //создали строковый поток, в который поместили str
        while (getline(ss, str, ' ')) //считываем в переменную str из потока символы разделенные пробелами
        {
            v.push_back(stoi(str)); //Добавляем в вектор число. Stoi(str) - преобразует строку в число.
        }
    }
    for (auto i : v) 
        cout << i << " ";
    return 1;
}

Замечание 1: Вместо пробела в while (getline(ss, str, ' ')) можно ставить любой разделитель.

Замечание 2: Если пробелов более 1, в строку попадет не число, будет ошибка.

Замечание 3: Если цифры разделены по пробелам, то можно использовать и copy, как указал Harry. Только copy не принимает других разделителей, кроме пробела.