У меня есть такая строка:
string str = "18:10";
18 минут и 10 секунд.
Мне нужно разделить строку str и сохранить их в две переменные типа int.
По сути, так: int a = 18, int b = 10. Как я могу это сделать?
Есть несколько способов сделать это, стиль 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
утилита вместо.
Попробуйте этот код.
#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:» или «:»).