c++从字符串中解析int
可能的重复:
如何在 C++ 中将字符串解析为 int?< /a>
我做了一些研究,有些人说使用 atio,另一些人说它不好,而且我无论如何也无法让它工作。
所以我只想问一下,将字符串转换为 int 的正确方法是什么。
string s = "10";
int i = s....?
谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
在 C++11 中,使用
std::stoi
为:
请注意,如果无法执行转换,
std::stoi
将抛出std::invalid_argument
类型的异常,或者std::out_of_range
> 如果转换导致溢出(即当字符串值对于int
类型来说太大时)。您可以使用std::stol
或std:stoll
但以防万一int
对于输入字符串来说似乎太小。在 C++03/98 中,可以使用以下任何一种:
请注意,对于输入
s = "10jh"
,上述两种方法都会失败。他们将返回 10 而不是通知错误。因此,安全可靠的方法是编写自己的函数来解析输入字符串,并验证每个字符以检查它是否是数字,然后进行相应的工作。这是一个强大的实现(尽管未经测试):此解决方案是 my另一种解决方案。
In C++11, use
std::stoi
as:Note that
std::stoi
will throw exception of typestd::invalid_argument
if the conversion cannot be performed, orstd::out_of_range
if the conversion results in overflow(i.e when the string value is too big forint
type). You can usestd::stol
orstd:stoll
though in caseint
seems too small for the input string.In C++03/98, any of the following can be used:
Note that the above two approaches would fail for input
s = "10jh"
. They will return 10 instead of notifying error. So the safe and robust approach is to write your own function that parses the input string, and verify each character to check if it is digit or not, and then work accordingly. Here is one robust implemtation (untested though):This solution is slightly modified version of my another solution.
您可以使用 boost::lexical_cast:
You can use boost::lexical_cast:
您可以使用
istringstream
。You can use
istringstream
.没有“正确的方法”。如果您想要一个通用(但次优)的解决方案,您可以使用
boost::lexicalcast
。C++ 的常见解决方案是使用
std::ostream
和<<运算符。您可以使用
stringstream
和stringstream::str()
方法转换为字符串。如果您确实需要快速机制(记住 20/80 规则),您可以寻找“专用”解决方案,例如 C++ 字符串工具包库
谨致问候,
马尔辛
There is no "right way". If you want a universal (but suboptimal) solution you can use a
boost::lexical cast
.A common solution for C++ is to use
std::ostream
and<< operator
. You can use astringstream
andstringstream::str()
method for conversion to string.If you really require a fast mechanism (remember the 20/80 rule) you can look for a "dedicated" solution like C++ String Toolkit Library
Best Regards,
Marcin
一些方便的快速功能(如果您不使用 Boost):
示例:
适用于任何可流类型(浮点数等)。您需要
#include
,也可能需要#include
。Some handy quick functions (if you're not using Boost):
Example:
Works for any streamable types (floats etc). You'll need to
#include <sstream>
and possibly also#include <string>
.