【问题标题】:Char to Int in C++? [duplicate]C ++中的Char到Int? [复制]
【发布时间】:2011-11-11 11:37:28
【问题描述】:

可能重复:
How to convert a single char into an int

好吧,我正在做一个基本程序,它处理一些输入,例如:

2+2

所以,我需要加 2 + 2。

我做了类似的事情:

string mys "2+2";
fir = mys[0];
sec = mys[2];

但现在我想将“fir”添加到“sec”,所以我需要将它们转换为 Int。 我尝试了“int(fir)”,但没有成功。

【问题讨论】:

    标签: c++ char int


    【解决方案1】:

    有多种方法可以将字符串转换为 int。

    解决方案 1:使用旧版 C 功能

    int main()
    {
        //char hello[5];     
        //hello = "12345";   --->This wont compile
    
        char hello[] = "12345";
    
        Printf("My number is: %d", atoi(hello)); 
    
        return 0;
    }
    

    解决方案 2:使用 lexical_cast(最合适且最简单)

    int x = boost::lexical_cast<int>("12345"); 
    

    解决方案 3:使用 C++ Streams

    std::string hello("123"); 
    std::stringstream str(hello); 
    int x;  
    str >> x;  
    if (!str) 
    {      
       // The conversion failed.      
    } 
    

    【讨论】:

    • @MGZero 有人是个混蛋,正在对答案投反对票。
    • 最近好像在 SO 的日子顺序。
    • 对于这种特殊情况,还有这个选项fir = mys[0] - '0';
    • 谢谢,但我更喜欢@Preatorian 方式,它是规范的吗?
    • @dysoco 只要您尝试将单个字符转换为 int,我发布的代码就应该可以工作。如果整数的字符串表示长于 1 个字符,请使用上面显示的方法之一。
    【解决方案2】:

    好的,所以首先介绍一下为什么您尝试的方法不起作用。在您的示例中, fir 被声明为字符串。当您尝试执行与 (int)fir 相同的 int(fir) 时,您尝试了从字符串到整数的 c 样式强制转换。本质上你会得到垃圾,因为 c++ 中的 c 风格转换将运行所有可用的转换并采用第一个有效的转换。充其量你会得到代表字符2的内存值,这取决于你使用的字符编码(UTF-8,ascii等......)。例如,如果 fir 包含“2”,那么您可能会得到 0x32 作为整数值(假设为 ascii)。你真的不应该使用 c 风格的强制转换,唯一可以安全使用它们的地方是数字类型之间的转换。

    如果您给定一个与示例中的字符串类似的字符串,首先您应该使用 strtok 之类的函数将字符串分成相关的字符序列(标记)。在这个简单的例子中,这将是“2”、“+”和“2”。完成后,您可以简单地在要转换为整数的字符串上调用诸如 atoi 之类的函数。

    例子:

    string str = "2";
    int i = atoi(str.c_str()); //value of 2
    

    但是,如果您还希望能够处理非整数,这将变得稍微复杂一些。在这种情况下,最好的办法是在操作数(+ - / * 等)上分开,然后在数字字符串上查找小数点。如果你找到了,你可以把它当作一个 double 并使用 atof 函数而不是 atoi,如果你没有,就坚持使用 atoi。

    【讨论】:

      【解决方案3】:

      你试过atoiboost lexical cast吗?

      【讨论】:

        猜你喜欢
        • 2010-09-22
        • 1970-01-01
        • 2013-08-20
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多