所以我一直在寻找如何将字符串转换为short并找到很多关于如何将字符串转换为整数的方法.我会留下一个问题作为对这些主题的评论,但我没有足够的声誉.所以,我想要做的是将字符串转换为short,因为数字应该永远不会超过三或零以下并且短路会节省内存(据我所知).
要清楚,我不是指ASCII码.
我希望能够做的另一件事是检查字符串到short的转换是否失败,因为我将使用由用户输入组成的字符串.
我知道我可以使用while循环来实现这一点,但是如果有一个内置函数在C++中执行此操作,那将与while循环一样或更高效,我很乐意听到它.
Che*_*Alf 12
基本上,std::stos由于未知原因缺少某个功能,但您可以轻松地自行滚动.使用std::stoi转换到int,对证值short例如通过定界std::numeric_limits<short>,抛出std::range_error,如果它不在范围内,否则返回值.那里.
如果你已经安装了Boost库,你可能会boost::lexical_cast 为了方便而使用,但我会避免使用它(主要是因为冗长和库依赖,它也有点低效).
之前boost::lexical_cast因为效率不高而众所周知,我相信因为它是基于字符串流内部的,但正如在评论中所报道的那样,现代版本比通过stringstream转换更快,而且比通过更快scanf.
一种有效的方法是使用 boost::lexical_cast:
short myShort = boost::lexical_cast<short>(myString);
Run Code Online (Sandbox Code Playgroud)
您需要安装boost 库,其中包括:#include <boost/lexical_cast.hpp>
bad_lexical_cast如果转换失败,你应该捕获:
try
{
short myShort = boost::lexical_cast<short>(myString);
}
catch(bad_lexical_cast &)
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
小智 1
该数字绝不能超过三或低于零
如果您确实需要节省内存,那么这也适合 char (无论 char 是有符号的还是无符号的)。
另一个“极端”技巧:如果您可以相信没有像“002”这样的奇怪的东西,那么您所拥有的就是单个字符串。如果是这种情况,并且您确实需要性能,请尝试:
char result = (char)( *ptr_c_string - '0' );
Run Code Online (Sandbox Code Playgroud)