Преобразование конкретных символов строки в int

Мне даны 4 строки времени (например 22:38 22:42 23:45 22:39) мне нужно записать значения часов и минут в переменные int hour1, hour2, hour3, hour4, min1, min2, min3, min4. Пробовал stoi(), но оно преобразует все цифры до :, а мне нужно как до, так и после


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

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

вы алгоритм неправильно составили

  1. разделить строку на массив строк через разделитель " "

  2. строки массива преобразовать уже в связку int, int

для первого этапа подойдет классistringstream (https://qna.habr.com/q/586289)

для второго этапа подойдет функция sscanf (http://www.cplusplus.com/reference/cstdio/sscanf/)

→ Ссылка
Автор решения: Yakov
#include <iostream>
#include <string>
#include <sstream>

std::string& replace(std::string& s, const std::string& from, const std::string& to)
{
    if (!from.empty())
        for (size_t pos = 0; (pos = s.find(from, pos)) != std::string::npos; pos += to.size())
            s.replace(pos, from.size(), to);
    return s;
}

int main()
{
    std::string test = "22:38 22:42 23:45 22:39";
    int hour1, hour2, hour3, hour4, min1, min2, min3, min4;
    std::stringstream ss(replace(test, ":", " "));
    ss >> hour1 >> min1 >> hour2 >> min2 >> hour3 >> min3 >> hour4 >> min4;
    std::cout<< "hour1="<< hour1 <<" "<< min1 << " hour2= "<<hour2 <<" "<< min2 << " hour3= "<<hour3 <<" "<< min3 << " hour4= "<<hour4 <<" "<< min4;
}
→ Ссылка