使用 s[i] - '0'
Use of s[i] - '0'
本文关键字:使用 更新时间:2023-10-16
下面的代码基本上接受一个字符串并将其转换为整数值。我不明白的是为什么int digit = s[i] - '0';
是必要的。为什么使用int digit = s[i]
不能正常工作?-'0'
有什么用途?
int main(){
string s = "123";
int answer = 0;
bool is_negative = false;
if (s[0] == '-')
{
is_negative = true;
}
int result = 0;
for (int i = s[0] == '-' ? 1 : 0; i < s.size(); ++i)
{
int digit = s[i] - '0';
result = result * 10 + digit;
}
answer = is_negative ? -result : result;
cout << answer << endl;
system("pause");
}
首先,在您的问题标题中
使用"0"
应该写成
s[i] - '0'
的使用
也就是说,通过减去char
0的ASCII值(表示为'0'
),我们得到以char
格式表示的数字的int
值(主要是ASCII值)
char
类型。
若要将字符"1"转换为整数,请执行"1"-"0"以获得1。这是由ASCII表中的位置决定的,字符"0"是48,而字符"1"是49。
减法的原因是s[i]
是例如'6'
。值'6'
计算为54
(ascii码)。"0"的ASCII代码为48。因此'6' - '0'
=6,这是表示为int
的字符值。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 使用新行和不使用新行读取文件
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何确定我已使用非编码文件到达 EOF?
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 使用CMake创建QML插件
- 使用strcpy将char数组的元素复制到另一个数组
- 在c++中使用nlohmann从类到json的转换
- 使用指针从C++中的数组中获取最大值
- 使用不带参数的函数访问结构元素