在问这个之前我一直在到处寻找,但没有找到任何东西。在我的 Schaums Programming with C++ 书中没有提到我正在从中学习的任何一个......
使用 C++ 如何转换字符串,例如"0:03:22" to 3 separate int values of
0, 03 and
22`?假设它可能。
就像是
std::string str="0:03:22";
std::istringstream ss(str);
int hours,mins,seconds;
char skip;
if(ss >> hours >> skip >> mins >> skip >> seconds) {
//success
}
在这里,我们正在创建一个流,我们可以从中提取每个元素。
简单的格式化提取应该可以解决问题:
#include <sstream>
std::istringstream iss("0:03:22");
int a, b, c;
char d1, d2;
if (iss >> a >> d1 >> b >> d2 >> c >> std::ws &&
iss.get() == EOF && d1 == ':' && d2 == ':')
{
// use a, b, c
}
else
{
// error!
}
确保包括条件检查:如果输入操作成功,您只能从a
,中读取!b
c
使用sscanf。它还返回转换的值的数量:
char* input = "0:03:22";
int a, b, c;
if (sscanf(input, "%d:%d:%d", &a, &b, &c) == 3)
{
printf("Three values converted: %u, %u, %u\n", a, b, c);
}
您首先将字符串解析为 3 个标记,然后使用 std stringstream 或 boost lexical_cast 将标记转换为整数。
就个人而言,我会在 ':' 上使用 boost::split,获取字符串向量,然后对它们运行 boost::lexical_cast。我确实相信有一个更现代的转换库可能会取代 lexical_cast 但你必须自己寻找它。拆分位于字符串算法库中。
它会比一些替代品慢,但除非有理由超快,否则它会很容易创建和修改,所以它会赢。