C ++字符串到int值

时间:2012-12-08 21:21:18

标签: c++ string time

在问这个问题之前,我一直在搜索,但没有找到任何东西。 在我的Schaums Programming with C ++ Book中没有提到它我自己也在学习......

使用C ++如何转换字符串,例如"0:03:22" to 3 separate int values of 0,03 and 22`?假设它可能。

5 个答案:

答案 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
}

这里我们正在创建一个流,我们可以从中提取每个元素。

参考

http://en.cppreference.com/w/cpp/io/basic_stringstream

答案 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!
}

确保包含条件检查:如果输入操作成功,您只能从abc读取!