Как из переменной string отсоединить числа и записать их в переменную int?

Есть переменная

string icq = "5123.1234.131.89";

Цифры могут быть любые.
Как мне отсоединить числа и поделить их на 4 части?

Чтобы было так
(1 часть).(2 часть).(3 часть).(4 часть).


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

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

Проще всего и без защиты от дурака —

string icq = "5123.1234.131.89";

int o[4];
char c;

istringstream ss(icq);
ss >> o[0] >> c >> o[1] >> c >> o[2] >> c >> o[3];

cout << o[0] << " - " << o[1] << " - " << o[2] << " - " << o[3];

Можно также использовать views::split из C++20.

P.S. Только вот на IP это как-то не тянет :) — октеты там до 255...

→ Ссылка
Автор решения: ТарасПрогер
int main()
{ 
    string icq = "5123.1234.131.89";
    vector<string> snums(count(icq.begin(), icq.end(), '.') + 1);
    vector<int> nums(count(icq.begin(), icq.end(), '.') + 1);

    int cur_pos = 0;

    while (icq.size() != 0) {
        auto first_dot = icq.find_first_of('.');
        if (first_dot == string::npos)
        {
            for (size_t i = 0; i < icq.size(); i++)
            {
                snums[cur_pos] += icq[i];
            }
            break;
        }
        for (size_t i = 0; i < first_dot; i++)
        {
            snums[cur_pos] += icq[i];
        }
        cur_pos++;
        icq.erase(0, first_dot + 1);
    }


    for (size_t i = 0; i < snums.size(); i++)
    {
        nums[i] = stoi(snums[i]);
    }

    for (auto i : nums)
        cout << i << endl;
    return 0;
   
}

Ход мыслей: создаём вектор будущих чисел и вспомогательный вектор строк, который мы сконвертируем в числовой вектор. Дальше разбиваем строку icq на числа и записываем их в вектор

→ Ссылка