разбить строку C ++ на два целых числа, которые разделены символом & quot;: & quot;

У меня есть такая строка:

string str = "18:10";

18 минут и 10 секунд.
Мне нужно разделить строку str и сохранить их в две переменные типа int.
По сути, так: int a = 18, int b = 10. Как я могу это сделать?

-2

Решение

Есть несколько способов сделать это, стиль C (atoi, atof так далее). В C ++ мы использовали бы std::stringstream из шапки sstream,

#include <iostream>
#include <sstream>

template <typename T>
T convertString( std::string str ) {
T ret;
std::stringstream ss(str);
ss >> ret;
return ret;
}

int main() {
std::string str = "18:10";
int minutes,seconds;

minutes = convertString<int>(str.substr(0,2));
seconds = convertString<int>(str.substr(3,4));

std::cout<<minutes<<" "<<seconds<<"\n";
}

Выход:

18 10

Это, конечно, предполагает, что ваша строка точно соответствует этому формату (то же количество целых чисел, разделенных двоеточием ..). Если вам нужно использовать это в более широком контексте, возможно, вам будет интересно использовать std::regex утилита вместо.

3

Другие решения

Попробуйте этот код.

#include <string>
#include <sstream>

template <class NumberType, class CharType>
NumberType StringToNumber(const std::basic_string<CharType> & String)
{
std::basic_istringstream<CharType> Stream(String);
NumberType Number;
Stream >> Number;
return Number;
}

const std::string str("18:10");
const size_t Pos = str.find(':');
const auto Hour = StringToNumber<int>(str.substr(0, Pos));
const auto Minute = StringToNumber<int>(str.substr(Pos + 1, std::string::npos));

Я не проверял это. Исправьте это, если есть какая-либо ошибка. Вы должны выполнить обработку ошибок, если ваша строка может содержать пустые части в течение часов или минут (например, «: 10», «18:» или «:»).

1