0

在问这个之前我一直在到处寻找,但没有找到任何东西。在我的 Schaums Programming with C++ 书中没有提到我正在从中学习的任何一个......

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

4

5 回答 5

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

于 2012-12-08T21:27:47.100 回答
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,中读取!bc

于 2012-12-08T21:34:08.427 回答
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);
    }
于 2012-12-08T21:27:54.907 回答
1

您首先将字符串解析为 3 个标记,然后使用 std stringstream 或 boost lexical_cast 将标记转换为整数。

于 2012-12-08T21:25:47.820 回答
1

就个人而言,我会在 ':' 上使用 boost::split,获取字符串向量,然后对它们运行 boost::lexical_cast。我确实相信有一个更现代的转换库可能会取代 lexical_cast 但你必须自己寻找它。拆分位于字符串算法库中。

它会比一些替代品慢,但除非有理由超快,否则它会很容易创建和修改,所以它会赢。

于 2012-12-08T21:26:29.877 回答