Как добавить добавлять 1 элемент строки, исключая пробелы?

Входные данные: На вход подаётся последовательность чисел.(Пример 1 2 3). Необходимо добавить все элементы в массив, исключая пробелы между ними.

Моя реализация:

#include <iostream>
using namespace std;

int main(){
    string st;
    getline(cin, st);
    int len_st = (st.size());
    int count = 0;
    char *word = new char[len_st];
    char x;
    for (int i = 0; i <= len_st; i ++) {
        count += 1;
        if (st[i] != " ") {
            x = st[i];
            word[i] = x;
        }
    }
    delete[] word;
}

Пытался реализовать вот так, но комплиятор ругается на сравнение st[i] != " ". Подскажите, как можно по другому реализовать подобный алгоритм или укажите на ошибку в моей реализации.


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

Автор решения: Bearded Beaver

У вас метка c++11, так что я бы написал как-нибудь вот так:

std::vector<int> splitString(const std::string& str)
{
    std::vector<int> result;
    auto begin = str.begin();
    auto end = begin;
    while (end != str.end())
    {
        // находим первый не пробельный символ
        begin = std::find_if(begin, str.end(), [](char c) -> bool{
            return c != ' ';
        });
        if (begin == str.end()) // если не нашли, выходим, тут больше ловить нечего
            break;
        end = std::find(begin, str.end(), ' '); // находим следующий пробельный символ
        std::string_view word(&*begin, std::distance(begin, end)); // это и будет очередное число
        result.push_back(std::stoi(word.data()));   // тут не помешала бы обработка ошибок
        begin = end;    // готовимся искать следующее число
    }
    return result;
}
→ Ссылка