C++ 将字符串转换为int

C++ 将字符串转换为int,c++,C++,您好,我有一个问题,我正在尝试将类似“12314234”的字符串转换为int 所以我将得到字符串中的第一个数字。 从上面显示的字符串示例中,我希望得到int中的“1”。 我试过: string line=“12314234”; int command=行。在(0) 但它将ascii值1而不是数字1放入命令中。 提前感谢。要将数字字符(“0”–“9”)转换为相应的值,只需从结果中减去“0”的ASCII码即可 int command = line.at(0) - '0'; 要将数字字符(“0”–“

您好,我有一个问题,我正在尝试将类似“12314234”的字符串转换为int 所以我将得到字符串中的第一个数字。 从上面显示的字符串示例中,我希望得到int中的“1”。 我试过:
string line=“12314234”;
int command=行。在(0)
但它将ascii值1而不是数字1放入命令中。

提前感谢。

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

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

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

int command = line.at(0) - '0';
要求数字字符的数值彼此相邻。因此,这在任何地方都是有效的。无论编译器使用什么字符集


要求数字字符的数值彼此相邻。因此,这在任何地方都是有效的。无论编译器使用什么字符集

将ascii转换为整数值的标准函数是stdlib(
#include
)中的strtol(string-to-long)。有关信息,请参阅并参阅标题为“正确且可移植地使用strtol”的页面链接。使用strtol,您可以转换一个数字字符或一系列数字字符,它们可以是多个基数(十进制、十六进制等)。

将ascii转换为整数值的标准函数是stdlib(
#include
)的strtol(字符串到长)。有关信息,请参阅并参阅标题为“正确且可移植地使用strtol”的页面链接。使用strtol,您可以转换一个数字字符或一系列数字字符,它们可以是多个基数(十进制、十六进制等)

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

Boost为此提供了一个库:

int i = boost::lexical_cast<int>(str);
inti=boost::词法转换(str);
我正在尝试将类似“12314234”的字符串转换为int

Boost为此提供了一个库:

int i = boost::lexical_cast<int>(str);
inti=boost::词法转换(str);

很抱歉迟到了,但有什么问题吗:

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类的哈希减法。< /P>


如果您正在使用boost,
boost::lexical_cast()
方法非常好而且干净。如果您不能保证传递的字符串将是一个数字,那么您应该捕获抛出的错误。

很抱歉,迟到了,但有什么问题:

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类的哈希减法。< /P>


如果您正在使用boost,
boost::lexical_cast()
方法非常好而且干净。如果你不能保证被传递的字符串是一个数字,那么你就应该捕获抛出的错误。<除了:C,而不是C++。@ MaSpicα包含并使用STD::Strutter()。是的,但是你必须将<<代码>字符串转换成<代码> char */COD> >是的,除了C,而不是C++。@ MaSpicα包括,然后使用STD::Strutter()。但是您必须将
字符串
转换为
char*
C/C++标准不保证ASCII。它们确实保证所有的数字字符代码都是相邻的,并且按顺序排列,因此,‘5’-‘0’将导致5,也不是真正的C++。见我的答案。C/C++标准不保证ASCII。它们确实保证所有的数字字符代码都是相邻的,并且按顺序排列,因此,‘5’-‘0’将导致5,也不是真正的C++。看看我的答案。