string в массив int c++

Уважаемые программисты! Возник такой вопрос: как перевести string, допустим "1244 22 12 56 7" в динамический массив int, чтобы он содержал {1244, 22, 12, 56, 7}.


Ответы (1 шт):

Автор решения: KoVadim

Есть много-много способов. Но все сводятся к разделению и потом переводу в числа.

вот один с любимых и простых

#include <vector>
#include <iostream>
#include <sstream>

std::vector<int> parse(const std::string& s) {
    std::vector<int> r;
    std::stringstream ss{s};
    int n;
    while (ss >> n) { r.push_back(n);}
    return r;
}

int main(){
    std::string s = "1244 22 12 56 7";
    std::vector<int> r = parse(s);
    for (auto el : r) {
        std::cout << el << "\n";
    }
}

А вот пример, как можно сделать эту же функцию, но "без внешних зависимостей". Правда она очень требовательная к формату - шаг в сторону и она работает неверно

std::vector<int> parse(const std::string& s) {
    std::vector<int> r;
    int n = 0;
    for (char c : s) {
        if (c == ' ') {
            r.push_back(n);
            n = 0;
        } else {
            n = n*10+c-'0';
        }
    }
    r.push_back(n);
    return r;
}

P.S. Многие, когда пишут "динамический массив" хотят почему то видеть указатель, но у нас же с++, а здесь динамический массив - это std::vector.

→ Ссылка