【发布时间】:2010-09-17 00:54:27
【问题描述】:
如何将 C++ 字符串转换为 int?
假设您希望字符串中包含实际数字(例如“1”、“345”、“38944”)。
另外,假设你没有 boost,你真的想用 C++ 方式来做,而不是笨拙的旧 C 方式。
【问题讨论】:
-
下面的一些例子怎么样:codeproject.com/KB/recipes/Tokenizer.aspx 它们非常高效而且有点优雅。
如何将 C++ 字符串转换为 int?
假设您希望字符串中包含实际数字(例如“1”、“345”、“38944”)。
另外,假设你没有 boost,你真的想用 C++ 方式来做,而不是笨拙的旧 C 方式。
【问题讨论】:
使用 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<> 的工作原理。
我最喜欢的方法是 boost lexical_cast<>
#include <boost/lexical_cast.hpp>
int x = boost::lexical_cast<int>("123");
它提供了一种在字符串和数字格式之间相互转换的方法。在它下面使用字符串流,因此可以将任何可以编组到流中然后从流中解组的内容(查看 >> 和
【讨论】:
使用atoi
【讨论】:
#include <sstream>
// st is input string
int result;
stringstream(st) >> result;
【讨论】:
在“stdapi.h”中
StrToInt
这个函数告诉你结果,有多少字符参与了转换。
【讨论】:
我之前在 C++ 代码中使用过类似以下的内容:
#include <sstream>
int main()
{
char* str = "1234";
std::stringstream s_str( str );
int i;
s_str >> i;
}
【讨论】:
也许我误解了这个问题,为什么您不想要使用atoi?我认为重新发明轮子没有意义。
我只是错过了这里的重点吗?
【讨论】:
C++ 常见问题精简版
[39.2] 如何将 std::string 转换为数字?
https://isocpp.org/wiki/faq/misc-technical-issues#convert-string-to-num
【讨论】:
让我投票支持 boost::lexical_cast
#include <boost/lexical_cast.hpp>
int val = boost::lexical_cast<int>(strval) ;
出错时抛出bad_lexical_cast。
【讨论】: