这个算法写在写伟大的代码卷 1 书中,用于将十进制数字字符串转换为整数值:
- 用零初始化一个变量;这将保持最终值。
- 如果字符串中不再有数字,则算法完成,变量保存数值。
- 从字符串中获取下一个数字(从左到右)。
- 将变量乘以 10,然后将步骤 3 中获取的数字相加。
- 转到第 2 步并重复。
我不知道转换是如何发生的。请举个例子。
/* warning: naive and unsafe implement. don't use it for important projects */
int strtod(const char *str)
{
int ret = 0;
while (*str)
ret = ret * 10 + *str++ - '0';
return ret;
}
这是您的标准字符串到整数的转换算法:
char *s = "12345";
int res = 0; // 1. Initialize a variable with zero
while (*s) { // 2. If there are no more digits in the string...
int d = (*s++ - '0'); // 3. Fetch the next digit
res = 10*res + d; // 4. Multiply the variable by ten, and then...
} // 5. Go to step 2 and repeat.
考虑字符串“1134”
String Variable
()1134 0
(1)134 0 * 10 + 1 = 1
1(1)34 1 * 10 + 1 = 11
11(3)4 11 * 10 + 3 = 113
113(4) 113 * 10 + 4 = 1134