在问这个问题之前,我一直在搜索,但没有找到任何东西。 在我的Schaums Programming with C ++ Book中没有提到它我自己也在学习......
使用C ++如何转换字符串,例如"0:03:22" to 3 separate int values of
0,03 and
22`?假设它可能。
答案 0 :(得分:6)
类似
std::string str="0:03:22";
std::istringstream ss(str);
int hours,mins,seconds;
char skip;
if(ss >> hours >> skip >> mins >> skip >> seconds) {
//success
}
这里我们正在创建一个流,我们可以从中提取每个元素。
答案 1 :(得分:1)
首先将字符串解析为3个标记,然后使用std stringstream或boost lexical_cast将标记转换为整数。
答案 2 :(得分:1)
就个人而言,我会在':'上使用boost :: split,获取字符串向量,然后对它们运行boost :: lexical_cast。我相信有一个更现代的转换库可以取代lexical_cast,但你必须自己寻找。 Split位于字符串算法库中。
它会比某些替代品慢,但除非有理由超快,否则它很容易创建并且易于修改,因此它会获胜。
答案 3 :(得分:1)
使用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);
}
答案 4 :(得分:1)
简单的格式化提取应该可以解决问题:
#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
读取!