在C++中将字符串转换为short

Log*_*ing 8 c++ string short

所以我一直在寻找如何将字符串转换为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.

  • @LarryK:我不会为你抓鱼,也不会为你做好准备.鉴于您对想要为您完成它的评论,您非常需要学习钓鱼和准备鱼.最好的方法是做到这一点. (2认同)

Jér*_*ucq 5

一种有效的方法是使用 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)