将 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 风格(atoi
、atof
等)。在 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:”或“:”),则必须进行错误处理。
我有这样的字符串:
string str = "18:10";
18 是分,10 是秒。 我需要拆分字符串 str 并将它们存储到两个 int 变量中。 所以本质上是这样的:int a = 18, int b =10。我怎么做?
有几种方法可以做到这一点,C 风格(atoi
、atof
等)。在 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:”或“:”),则必须进行错误处理。