可能重复:
如何在 C++ 中将字符串解析为 int?
如何将 C++ 字符串转换为 int?
假设您希望字符串中包含实际数字(例如,“1”、“345”、“38944”)。
另外,假设您没有 boost,并且您真的想以 C++ 方式进行,而不是使用笨拙的旧 C 方式。
可能重复:
如何在 C++ 中将字符串解析为 int?
如何将 C++ 字符串转换为 int?
假设您希望字符串中包含实际数字(例如,“1”、“345”、“38944”)。
另外,假设您没有 boost,并且您真的想以 C++ 方式进行,而不是使用笨拙的旧 C 方式。
#include <sstream>
// st is input string
int result;
stringstream(st) >> result;
使用 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");
它提供了一种在字符串和数字格式之间转换并再次转换回来的方法。在它下面使用字符串流,因此可以将任何可以编组为流然后从流中解组的内容(查看 >> 和 << 运算符)。
C++ 常见问题解答精简版
[39.2] 如何将 std::string 转换为数字?
https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num
我之前在 C++ 代码中使用过类似以下的内容:
#include <sstream>
int main()
{
char* str = "1234";
std::stringstream s_str( str );
int i;
s_str >> i;
}
让我添加我对 boost::lexical_cast 的投票
#include <boost/lexical_cast.hpp>
int val = boost::lexical_cast<int>(strval) ;
它会引发bad_lexical_cast
错误。
也许我误解了这个问题,你为什么不想使用atoi?我认为重新发明轮子没有意义。
我只是在这里错过了重点吗?
使用atoi
在“stdapi.h”中
StrToInt
这个函数告诉你结果,以及有多少字符参与了转换。