将 C++ 字符串拆分为两个整数,以“:”分隔

split a C++ string into two integers, which are delimited by ":"

我有这样的字符串:

string str = "18:10"; 

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

有几种方法可以做到这一点,C 风格(atoiatof 等)。在 C++ 中,我们将使用 header sstream.

中的 std::stringstream
#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:”或“:”),则必须进行错误处理。