C++强制转换字符串的单个元素
C++ casting a single element of a string
我最近尝试将字符串的一个元素(仅由数字构建)转换为 int,为了避免奇怪的结果(如 49 而不是 1),我不得不使用"stringstream"(甚至不知道它是什么以及它是如何工作的)而不是 int variable = static_cast<int>(my_string_name[digit_position]);
。
根据我读到的有关这些"流"的信息,当您使用它们时,类型无关紧要,所以我想情况就是如此。问题是:我实际上想从什么类型转换,为什么它不起作用?我认为字符串元素是字符,但如果转换不起作用,显然不是。
我认为字符串元素是字符,但如果转换不起作用,显然不是。
是的,这是一个炭。但是,此字符的值不是它在屏幕上的呈现方式。这实际上取决于字符串的编码。例如,如果您的字符串是用 ASCII 编码的,您可以看到您获得的"奇怪"49 值必须表示为'1'
字符。在此基础上,您可以减去字符'0'
的 ASCII 代码以获取这些字符的数值。但是,要非常小心:这在很大程度上取决于您的编码。当您甚至无法如此天真地索引它们时,您的字符串可能会使用多字节字符。
您正在寻找的不是强制转换,而是std::stoi
(http://en.cppreference.com/w/cpp/string/basic_string/stol)函数,它将整数的字符串表示转换为int
。
char
值已经是数字,这样的static_cast
在这里不会有太大帮助。您真正需要的是:
int variable = my_string_name[digit_position] - '0';
对于 ASCII 值,'0' - '9'
的数字被编码为来自 49 - 59
的十进制数。因此,要获得由数字表示的数值,我们需要减去第 1 位数字值 49。
为了使代码可移植到其他字符编码表(例如EBCDIC),减去'0'
。
假设你有一个字符串:std::string myString("1");
.您可以访问第一个元素,即类型 char
并通过 static_cast
将其转换为类型 int
。但是,您对将要发生的事情的预期是不正确的。
在查看 ASCII 表中的数字 1
时,您会发现它的基数为 10 的整数值为 49
,这就是为什么强制转换给出您所看到的输出。相反,您可以使用像atoi
这样的转换函数(例如,atoi(&myString[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';
您正在使用数字的 ASCII 字符代码,而不是实际数字。但是,由于 ASCII 字符代码的布局顺序:
-
'0'
-
'1'
-
'2'
-
'3'
-
'4'
-
'5'
-
'6'
-
'7'
-
'8'
-
'9'
因此,如果您要转换单个字符并且您的字符以 10 为基数,那么您可以使用:
int variable = my_string_name[digit_position] - '0'
但这取决于按顺序排列的字符代码的使用。具体来说,如果这里穿插了任何其他字符,这根本不起作用(我不知道任何字符代码映射没有按顺序列出这些字符。
但是为了保证转换,您应该使用stoi
:
int variable = stoi(my_string_name.substr(digit_position, 1))
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- 如何在 c++ 中将整个数组初始化为类构造函数中的单个元素
- 删除二叉搜索树 (C++) 中的单个元素
- Leetcode 540 上的运行时错误.排序数组中的单个元素
- 尝试从列表中随机选取单个元素并将其显示为C++
- 如何计算单个元素在向量<float>中所有元素之和中的百分比
- 我如何处理数组的单个元素
- 删除两个相邻的元素并用矢量中的单个元素替换它们
- 是否可以在C STL中获得集合的单个元素
- 从2D数组C 中删除单个元素
- 连续单个元素的敏感变量
- 在动态数组C 中删除单个元素
- 在C++中,如何在没有新元素且不单独声明单个元素的情况下创建"std::initializer_list<base *>"?
- 如何在多维数组中搜索单个行,然后对某些行中的每个单个元素执行计算
- 在什么基础上,由单个元素组成的参数包的折叠表达式被转换为未加括号的表达式
- 如何将双数组的单个元素转换为 QString
- 在链表中插入单个元素会导致分割错误 - C++
- 如何将2D平行向量的单个元素重新分配给1D向量
- 访问CV :: MAT_16UC1的单个元素
- C++单个元素的数组增量