алгоритм с sort плохо работает

Написал алгоритм который должен сортировать числа в порядке возрастания. Ввод через 1 строку. В строке входный чисел их не более 100000. Работает, но с ошибкой. Не проходит 1 тест. Входные данные вводяться в 1 строку, числа отделяються одним пробелом. В данном случае правильно работает только при введении чисел между которыми только один пробел, но я еще делал, чтобы оно работало несмотря на количество пробелов, но всёравно не проходит тест тот самый тест, который и не проходил, неправильный результат. Делал еще и с массивом, ситуация такая же.

#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>

using namespace std;
int main() {
    string n;
    long int k = 0;
    long int symbolcount;
    vector<int> vec;
    getline(cin, n);
    while (n.length())
    {
        vec.push_back(atoi(n.c_str()));
        symbolcount = log10(vec[k]) + 2;
        n.erase(0, symbolcount);
        k++;
    }
    sort(vec.begin(), vec.end());
    for (int i = 0; i < vec.size(); i++)
    {
        printf("%d ", vec[i]);
    }
}

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

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

Можете использовать istringstream. Просто инициализируете его Вашей строкой, а потом используйте его как cin для извличения чисел.

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

using namespace std;

int main()
{
    string input;
    getline(cin, input);
    istringstream stream(input);
    vector<int> vec;
    
    // Заполнение вектора
    int temp;
    while (stream >> temp)
    {
        vec.push_back(temp);
    }
    // Или так
    // copy(istream_iterator<int>(stream), istream_iterator<int>(), back_inserter(vec));

    sort(vec.begin(), vec.end());

    for (int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] << '\t';
    }
    // Или так
    // copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, "\t"));

    return 0;
}
→ Ссылка