#include <iostream>
#include <cstring>
using namespace std;
long digitToLong(char c) { // function returns the value type long (c - '0') and takes the char c as an argument.
return c - '0'; // c is equal to (text[i]) and 0 is the code ascii assigned as a nr 0.
}
long toLong(string text) {. /* takes a text that represents a number and then transfers the text into a number.*/
long result = 0;
for (int i = 0; i < text.length(); i++) { /* for loop that iterates through every character included in a text length.*/
result *= 10;
result += digitToLong(text[i]);
}
return result;
}
int main() {
char number[] = "0123456789";
cout << (toLong("0") == 0) << endl;
cout << (toLong("1") == 1) << endl;
cout << (toLong("2") == 2) << endl;
cout << (toLong("5") == 5) << endl;
cout << (toLong("12") == 12) << endl;
cout << (toLong("123") == 123) << endl;
cout << (toLong("12345") == 12345) << endl;
}
在上面的代码中,我的老师使用了字符串到长字符串的转换方法,我们将每个字符与其ASCII值进行比较,然后获得该数字字符的值。我试图描绘这个转换的过程,我被上面的两行代码卡住了,因此我把我的问题直接问到StackOverflow社区,希望这个问题能得到回答。行结果 *= 10;并且result += digitToLong(text[I])也可以写成 result = result * 10 + (c - '0')
正确吗?为什么要把result乘以10?我假设这是因为在十进制中,乘以10会将所有数字移到左边,改变它的值。它在现实中是如何应用于这段代码的?其背后的“机制”是什么?
在这段代码中,C到底被赋值了什么?怎么读?Ic c等于文本[I]吗?那么,文本[I]下面是什么?for循环的迭代怎么算?我真的试图理解程序的逻辑(尤其是函数),但有些部分还无法忍受。
我尽我所能做了我的研究,我真的希望我的问题能得到回答。
2条答案
按热度按时间dgjrabp21#
Q1.代码的作用和机制是什么?
你说得对。执行此操作是因为您从左侧逐个获取数字(最高有效数字),但需要从右侧插入。
让我们试着把它分解。
result = 0
,因此乘以10没有任何作用。i = 0
。digitTolong()
只能得到一个数字,所以简单地将该数字添加到result
上就等同于将其粘贴到最右边的位置。Q2.
c
和text[i]
在这里做什么?我想你知道数组或向量。字符串的作用是一样的,除了这一次,它是一堆
char
(字符)。当您使用string[i]
时,它只是从左起第i个字符,从零开始。例如,在
string str = "abcdefg"
上调用str[3]
,基本上就是'd'
。然后,将其传递给digitToLong()
。最后,在字符之间执行减法。你是怎么做到的?
在ACSII代码表中(谷歌一下!),你可以看到,当你有一个字符
0
时,它实际上存储在内部为数字48。'1'
为49,'2'
为50,依此类推。使用这个属性,减去
'0'
实际上会得到正确的数字值(例如,'1' - '0'
实际上会得到49 - 48
,它会得到1.),因此您可以在函数中看到字符减法。希望你现在能明白。
roejwanj2#
在这个函数中,我们将字符的ASCII转换为真实的。如果字符是
'1'
,那么ASCII是49
,我们从49
中减去48
('0'
字符),得到1
。在这个函数中,你从第一个数字开始迭代从函数中得到的字符串,所以如果你得到
"123"
,你就迭代'1'
,'2'
和最后一个'3'
。在每次迭代中,您只需
*= 10
结果,将添加到结果中的数字向左移动,然后再次+=
结果,并将下一个数字追加到结果中。