gpt4 book ai didi

c++从字符串中解析int

转载 作者:IT老高 更新时间:2023-10-28 12:06:38 32 4
gpt4 key购买 nike

Possible Duplicate:
How to parse a string to an int in C++?

我做了一些研究,有些人说要使用 atio,有些人说它不好,反正我无法让它工作。

所以我只想问清楚,将字符串转换为 int 的正确方法是什么。

string s = "10";
int i = s....?

谢谢!

最佳答案

  • 在 C++11 中,使用 std::stoi如:

     std::string s = "10";
    int i = std::stoi(s);

    请注意,如果无法执行转换,std::stoi 将抛出 std::invalid_argument 类型的异常,或者 std::out_of_range > 如果转换导致溢出(即字符串值对于 int 类型来说太大)。您可以使用std::stolstd:stoll虽然如果 int 对于输入字符串来说似乎太小了。

  • 在 C++03/98 中,可以使用以下任何一种:

     std::string s = "10";
    int i;

    //approach one
    std::istringstream(s) >> i; //i is 10 after this

    //approach two
    sscanf(s.c_str(), "%d", &i); //i is 10 after this

请注意,上述两种方法对于输入 s = "10jh" 将失败。他们将返回 10 而不是通知错误。因此,安全可靠的方法是编写自己的函数来解析输入字符串,并验证每个字符以检查它是否为数字,然后相应地工作。这是一个强大的实现(虽然未经测试):

int to_int(char const *s)
{
if ( s == NULL || *s == '\0' )
throw std::invalid_argument("null or empty string argument");

bool negate = (s[0] == '-');
     if ( *s == '+' || *s == '-' ) 
        ++s;

if ( *s == '\0')
throw std::invalid_argument("sign character only.");

     int result = 0;
     while(*s)
     {
          if ( *s < '0' || *s > '9' )
throw std::invalid_argument("invalid input string");
          result = result * 10  - (*s - '0');  //assume negative number
          ++s;
     }
     return negate ? result : -result; //-result is positive!

此解决方案是 my another solution 的略微修改版本.

关于c++从字符串中解析int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4442658/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com