将C ++字符串拆分为两个整数,这些整数由"分隔:"

时间:2016-03-05 05:34:39

标签: c++ string integer colon

我有一个这样的字符串:

string str = "18:10"; 

18是分钟,10是秒。 我需要拆分字符串str并将它们存储到两个int变量中。 所以基本上是这样的:int a = 18,int b = 10。我怎么做?

2 个答案:

答案 0 :(得分:3)

有几种方法可以做到这一点,C风格(atoiatof等)。在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:”或“:”),则必须进行错误处理。