46

可能重复:
如何在 C++ 中将字符串解析为 int?

如何将 C++ 字符串转换为 int?

假设您希望字符串中包含实际数字(例如,“1”、“345”、“38944”)。

另外,假设您没有 boost,并且您真的想以 C++ 方式进行,而不是使用笨拙的旧 C 方式。

4

8 回答 8

74
#include <sstream>

// st is input string
int result;
stringstream(st) >> result;
于 2008-10-14T05:44:55.510 回答
33

使用 C++ 流。

std::string       plop("123");
std::stringstream str(plop);
int x;

str >> x;

/* Lets not forget to error checking */
if (!str)
{
     // The conversion failed.
     // Need to do something here.
     // Maybe throw an exception
}

PS。这个基本原则就是 boost 库的lexical_cast<>工作原理。

我最喜欢的方法是boostlexical_cast<>

#include <boost/lexical_cast.hpp>

int x = boost::lexical_cast<int>("123");

它提供了一种在字符串和数字格式之间转换并再次转换回来的方法。在它下面使用字符串流,因此可以将任何可以编组为流然后从流中解组的内容(查看 >> 和 << 运算符)。

于 2008-10-14T05:37:08.567 回答
4

C++ 常见问题解答精简版

[39.2] 如何将 std::string 转换为数字?

https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num

于 2008-10-15T17:45:41.730 回答
4

我之前在 C++ 代码中使用过类似以下的内容:

#include <sstream>
int main()
{
    char* str = "1234";
    std::stringstream s_str( str );
    int i;
    s_str >> i;
}
于 2008-10-14T05:48:54.470 回答
2

让我添加我对 boost::lexical_cast 的投票

#include <boost/lexical_cast.hpp>

int val = boost::lexical_cast<int>(strval) ;

它会引发bad_lexical_cast错误。

于 2008-11-20T00:54:01.660 回答
0

也许我误解了这个问题,你为什么不想使用atoi?我认为重新发明轮子没有意义。

我只是在这里错过了重点吗?

于 2008-10-14T11:57:57.753 回答
0

使用atoi

于 2008-10-14T05:39:44.130 回答
-6

在“stdapi.h”中

StrToInt

这个函数告诉你结果,以及有多少字符参与了转换。

于 2008-10-14T05:45:58.550 回答