C ++转换字符串的单个元素

时间:2016-07-06 13:34:52

标签: c++ casting

我最近尝试将字符串的元素(仅使用数字构建)转换为int,以避免出现结果(如49而不是1)我必须使用&#39; stringstream&#39; (甚至不知道它是什么以及它是如何工作的)而不是int variable = static_cast<int>(my_string_name[digit_position]);

根据我所读到的关于这些&#39;溪流&#39;当你使用它们时类型是无关紧要的,所以我猜是这样的。问题是:我实际上想要转换哪种类型以及为什么它不起作用?我认为字符串元素是一个字符串但显然不是转换没有工作

7 个答案:

答案 0 :(得分:2)

  

我认为字符串元素是char,但如果转换不起作用,则显然不是。

是的,它是一个字母。但是,此char的值不是它在屏幕上的呈现方式。这实际上取决于字符串的编码。例如,如果您的字符串是用ASCII编码的,您可以看到您获得的“奇异”值49必须表示为'1'个字符。在此基础上,您可以减去字符'0'的ASCII代码以获取这些字符的数值。但是,要非常小心:这在很大程度上取决于您的编码。当你甚至无法对它们进行天真的索引时,你的字符串可能会使用多字节字符。

答案 1 :(得分:2)

char值已经是数字,因此static_cast在这里不会对您有所帮助。你真正需要的是:

int variable = my_string_name[digit_position] - '0';

对于ASCII值,数字'0' - '9'被编码为49 - 59的十进制数。因此,要获得由数字表示的数值,我们需要减去49的第1位数值。

为了使代码可以移植到其他字符编码表(例如EBCDIC),'0'被减去。

答案 2 :(得分:2)

我相信你所寻找的不是演员,而是std::stoihttp://en.cppreference.com/w/cpp/string/basic_string/stol)函数,它将整数的字符串表示转换为int

答案 3 :(得分:1)

假设您有一个字符串:std::string myString("1");。您可以访问类型为char的第一个元素,然后通过int将其转换为static_cast类型。但是,您对将要发生的事情的预期是不正确的。

在查看ASCII table for number 1后,您会看到它的基数为10的整数值为49,这就是为什么演员会给出您看到的输出。相反,您可以使用转化功能,例如atoi(例如atoi(&myString[0]);)。

答案 4 :(得分:0)

你的“古怪结果”实际上并不是那种古怪的。访问std::string的单个字符时,my_string_name[digit_position]就是char。将char放在int中会将'1'转换为int。看http://www.asciitable.com/我们可以看到49是'1'的表示。要获得实际数字,您应该int number = my_string_name[digit_position] - '0';

答案 5 :(得分:0)

您正在使用ASCII字符代码表示数字,而不是实际数字。但是因为ASCII字符代码是laid out in order

  1. '0'
  2. '1'
  3. '2'
  4. '3'
  5. '4'
  6. '5'
  7. '6'
  8. '7'
  9. '8'
  10. '9'
  11. 因此,如果您要转换单个字符并且您的角色位于基数10,那么您可以使用:

    int variable = my_string_name[digit_position] - '0'
    

    但这取决于使用按顺序排列的字符代码。具体来说,如果这里散布着任何其他角色,这根本不起作用(我不知道任何字符代码映射没有按顺序列出这些。)

    但为了保证转换,您应该使用stoi

    int variable = stoi(my_string_name.substr(digit_position, 1))
    

答案 6 :(得分:-1)

这里显示了如何执行此类操作。

#include <iostream>
#include <string>

int main() 
{
    std::string s( "12345" );

    for ( std::string::size_type i = 0; i < s.size(); i++ )
    {
        int x = s[i] - '0';
        std::cout << x;
    }
    std::cout << std::endl;

    int x = std::stoi( s );
    std::cout << x << std::endl;

    return 0;
}

程序输出

12345
12345