我尝试添加两个字符数组或整数数组。 仅当数组中的值为一位数时,它才能正常工作。 如果一个或两个数组的数字都有两位数,那我就得错了答案。
假设
//n = 3
a1[n] = "1 2 3"
a2[n] = "4 5 6"
我使用while循环添加...
while(sizeofarray > i)
{
result[i]= atoi(&12[i]) + atoi(&a2[i]);
i++;
}
我得到了正确答案。
但是如果
a1[n] = "1 10 20"
a2[n] = "4 5 6"
添加结果将是错误的。
解决此问题的正确代码是什么。 或者至少是这个想法。
答案 0 :(得分:1)
C字符串的每个“元素”是单个字符,而“10”是一个数字的意义上的“数字”。例如,这些声明是等效的:
char a1[] = "1 10 20";
char a1[] = {'1', ' ', '1', '0', ' ', '2', '0', 0};
char a1[] = {49, 32, 49, 48, 32, 50, 32, 0};
/* The 0 at the end is the NUL terminator, which tells the C library
that the string ends at that point */
如果您将a1
和a2
创建为数组,则可以添加相应的元素。
int a1[] = {1, 10, 20};
int a2[] = {4, 5, 6};
但我假设您需要将它们解析为字符串,而不能直接创建数组,例如从标准输入(通常是键盘)或文件中读取数据。我看到你正在使用atoi
函数将字符串转换为数字。但是atoi
函数不会返回吞噬的数字。因此,除非添加1位数字,否则i++;
将跳过太少的数字。此外,使用一个变量(i
)将索引保存到两个字符串中只有当每个字符串中的数字从相同的索引开始时,即每个元素具有相同的数字位时才起作用。
要解决此问题,您需要做两件事:
a1
和a2
数组使用单独的指针。每个指针都指向已经读取的数组部分。这样,在从每个字符串中读取两个整数后,一个指针将指向“10”的末尾,另一个指针指向“5”的末尾。strtol
function,它返回指向函数已读取的字符串部分末尾的指针。然后,您可以使用此指针跳过该数字,然后(手动)跳过空格直到达到下一个数字(使用isdigit
)或NUL终止符。答案 1 :(得分:0)
您有一个字符数组,因此,字符串中编码的数字不会被识别为数字。这会导致程序在添加例程期间无法找到并对齐小数位的副作用。
" 10" +" 3"会发生什么事情" 40"如果你没有手动对齐小数位。使用整数数组可以解决问题,因为数学例程将自动考虑所有数学类型的小数位对齐。
要解决此问题,您需要执行例程