我有一个这样的字符串:
string str = "18:10";
18是分钟,10是秒。 我需要拆分字符串str并将它们存储到两个int变量中。 所以基本上是这样的:int a = 18,int b = 10。我怎么做?
答案 0 :(得分:3)
有几种方法可以做到这一点,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
实用程序感兴趣。
答案 1 :(得分:1)
试试这段代码。
#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:”或“:”),则必须进行错误处理。