将字符串转换为int

时间:2010-09-04 14:02:33

标签: c++

你好,我有一个问题,我试图将像“12314234”这样的字符串转换为int 所以我将得到字符串中的第一个数字。 从上面显示的字符串示例我想在int中得到'1'。 我试过了 : string line = "12314234"; int command = line.at(0); 但是它将ascii值设置为1而不是数字1。 提前谢谢。

5 个答案:

答案 0 :(得分:4)

int command = line.at(0) - '0';

数字字符的数值必须彼此相邻。所以这无处不在。无论编译器使用什么字符集。

答案 1 :(得分:3)

要将数字字符('0' - '9')转换为相应的值,只需从结果中减去“0”的ASCII代码。

int command = line.at(0) - '0';

答案 2 :(得分:2)

将ascii转换为整数值的标准函数是stdlib(#include <cstdlib>)的strtol(字符串到长整数)。有关信息,请参阅http://en.wikipedia.org/wiki/Strtol,然后选择标题为正确且可移植地使用strtol的页面上的链接。使用strtol,您可以转换一个数字字符或一系列数字字符,它们可以是多个碱基(dec,hex等)。

答案 3 :(得分:1)

  

我正在尝试将类似“12314234”的字符串转换为int

Boost有一个库:

int i = boost::lexical_cast<int>(str);

答案 4 :(得分:1)

很抱歉很晚才加入这个派对但是出了什么问题:

int value;
std::string number = "12345";
std::istringstream iss(number);
iss >> value;

如果您正在传递十六进制(这些日子不是这些日子)​​,那么您可以这样做:

int value;
std::string number = "0xff";
std::istringstream iss(number);
iss >> std::hex >> value;

这是C ++,没有任何ASCii东西的减法。

如果使用boost,boost::lexical_cast<>()方式很干净。如果你不能保证传递的字符串将是一个数字,那么你应该捕获抛出的错误。