我想知道我是否可以使用static_cast
将部分字符串转换为整数?
我知道像atoi()
这样的东西存在,但是我真的应该使用它来将我的字符串的第一个字符转换成整数吗?
int w;
string my_str;
getline(cin, my_str);
w = static_cast<int>(my_str[0]) - 48;
这样的事情是否正确?或者我应该以另一种方式做到这一点?
答案 0 :(得分:5)
只要您确定 <tr>
<td bgcolor="<?php echo $colors[2];?>"><?php echo $colors[2]; ?></td>
</tr>
包含数字字符,就可以了。
你应该避免像my_str[0]
这样的幻数,更好地写48
数字w = my_str[0] - '0';
是48
的ASCII码数字表示。还有其他character code systems(如EBCDIC代码),c或c ++语言没有明确的概念,数字表示可能完全不同。
那就是说使用'0'
对于许多字符代码系统而言都是可移植的,而不仅仅是ASCII代码。
答案 1 :(得分:4)
没有必要使用static_cast,因为在任何情况下,整数提升都应用于my_str[0]
类型的表达式char
。所以这两个表达式
static_cast<int>(my_str[0]) - 48;
和
my_str[0] - 48;
是等价的。
如果您只想转换字符串的一个字符,这是正确的。否则,您应该使用标准函数stoi
。
除了幻数48之外,使用字符文字'0'
my_str[0] - '0';
因为它更具可读性和清晰度,并且不依赖于使用的编码系统。例如,在EBCDIC中,零代码为0xF0
。
答案 2 :(得分:1)
一般情况下,最好使用'0'
而不是48
。
虽然在实践中最常使用ASCII表示(或兼容表示),但标准化字符集'0'
在数值上不等于48
。
还有一个可读性论点。对于凡人来说,使用像48
这样的幻数来理解代码是比较困难的。这样可以更轻松地了解x - '0'
对x - 48
所做的事情。
答案 3 :(得分:0)
你的演员表会返回你的第一个角色的ascii代码。而你实际上并不需要演员。 my_str[0] - '0'
也完成了这项工作。
只要介于“0”和“9”之间,就可以按照您的意愿使用。但你必须检查结果。因为如果那个字符是超出边界的东西,你将得到一个负数或数字超过9的结果
答案 4 :(得分:0)
计算机只能理解数字,这就是键盘(和其他)上的字符使用编码系统 1 表示的原因,其中每个字符都分配有唯一的数。
字符串是字符序列,正如我们所说,每个字符由数字表示。如果字符表示(如ASCII)涉及从'0'
开始按顺序排列数字9
到'0'
。
如果你有一个数字字符,减去'0'
“将”转换为它的数字值,因为你的情况下的表达式:
w = static_cast<int>(my_str[0]) - 48;
在表示字符值的数字 int
之间执行减法。十进制值:48
唯一表示字符'0'
2 。
static_cast<int>
是一种矫枉过正,因为整个右手边都是整数
注意:减去'0'
对于那些真正了解计算机所属内容的人所使用的转换来说是一个老技巧,与我们不同。
1。编码标准的一个示例是ASCII。
2。 ASCII '0'
中的48
//在十进制中。
P.S。:如果数字42
是'0'
的ASCII码数字表示,问题会更好,那么每个答案都会非常有趣。