一个小小的问题
num1 = *str1 - '0';这个代码是什么意思呢 发完整,str是什么,
不过根据经验是吧字符串格式的数字转化成int 学习编程中的Ben 发表于 2023-1-2 18:30
发完整,str是什么,
不过根据经验是吧字符串格式的数字转化成int
char *add_two_strs(char *str1, char *str2)
{
int carry = 0; // 存放进位
int num1, num2, num3;
char *result;
result = (char *)malloc(INIT_SIZE);
if(result == NULL)
{
exit(1);
}
result = '\0'; // 需要 '\0'
// 字符串的存放顺序跟加法规则相反
// 需要先反转字符串
str1 = reverse_str(str1);
str2 = reverse_str(str2);
// 两个字符串按位相加
while(*str1 != '\0' || *str2 != '\0')
{
num1 = *str1 - '0';
num2 = *str2 - '0';
if(*str1 == '\0')
{
num1 = 0;
}
else
{
str1++;
}
if(*str2 == '\0')
{
num2 = 0;
}
else
{
str2++;
}
num3 = num1 + num2 + carry;
if(num3 > 9)
{
result = append_result(result, num3 - 10 + '0');
carry = 1;
}
else
{
result = append_result(result, num3 + '0');
carry = 0;
}
}
if(carry)
{
append_result(result, carry + '0');
}
result = reverse_str(result);
return result;
} 学习编程中的Ben 发表于 2023-1-2 18:30
发完整,str是什么,
不过根据经验是吧字符串格式的数字转化成int
str就是以字符类型传入函数的一个整数 学习编程中的Ben 发表于 2023-1-2 18:30
发完整,str是什么,
不过根据经验是吧字符串格式的数字转化成int
为什么这样能把字符串格式改成整数呢
不改成整形怎么加减呢?
字符型数字不能相加减 转换成acsll码运算 学习编程中的Ben 发表于 2023-1-2 19:01
转换成acsll码运算
?
ascii ?
ascll ?
人造人 发表于 2023-1-2 19:09
?
ascii ?
ascll ?
发错了, 对不起 本帖最后由 两手空空儿 于 2023-1-3 16:53 编辑
num1 = *str1 - '0';
ASCII里是用数值记录字符的, '0' = 30H, '5' = 35H ,
所以,如果 *str1 存放的是字符 '5',那么 *str1 - '0'就等于 35H-30H = 5, 这样num1就拿到了数字5
basketmn 发表于 2023-1-2 18:52
不改成整形怎么加减呢?
字符型数字不能相加减
不需要转成整形吧,char类型的在计算机存储方式和int类型是一样的,所以字符串之间也能进行加减,只是不能进行比较而已(如果想法有错误的话,尽管指出{:10_254:}) 夏日炎凉 发表于 2023-1-4 21:23
不需要转成整形吧,char类型的在计算机存储方式和int类型是一样的,所以字符串之间也能进行加减,只是不 ...
应该是有整型提升吧,要先转成int型,然后计算出答案后,截断放入char中。 pkqbszs 发表于 2023-1-2 18:39
应该是对str1这个指针进行取值然后转为整形赋值给num1的意思吧
页:
[1]