添加两个数组

时间:2014-11-14 17:00:31

标签: c arrays addition

我尝试添加两个字符数组或整数数组。 仅当数组中的值为一位数时,它才能正常工作。 如果一个或两个数组的数字都有两位数,那我就得错了答案。

假设

//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"

添加结果将是错误的。

解决此问题的正确代码是什么。 或者至少是这个想法。

2 个答案:

答案 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 */

如果您将a1a2创建为数组,则可以添加相应的元素。

int a1[] = {1, 10, 20};
int a2[] = {4, 5, 6};

但我假设您需要将它们解析为字符串,而不能直接创建数组,例如从标准输入(通常是键盘)或文件中读取数据。我看到你正在使用atoi函数将字符串转换为数字。但是atoi函数不会返回吞噬的数字。因此,除非添加1位数字,否则i++;将跳过太少的数字。此外,使用一个变量(i)将索引保存到两个字符串中只有当每个字符串中的数字从相同的索引开始时,即每个元素具有相同的数字位时才起作用。

要解决此问题,您需要做两件事:

  1. 对每个a1a2数组使用单独的指针。每个指针都指向已经读取的数组部分。这样,在从每个字符串中读取两个整数后,一个指针将指向“10”的末尾,另一个指针指向“5”的末尾。
  2. 使用strtol function,它返回指向函数已读取的字符串部分末尾的指针。然后,您可以使用此指针跳过该数字,然后(手动)跳过空格直到达到下一个数字(使用isdigit)或NUL终止符。

答案 1 :(得分:0)

您有一个字符数组,因此,字符串中编码的数字不会被识别为数字。这会导致程序在添加例程期间无法找到并对齐小数位的副作用。

" 10" +" 3"会发生什么事情" 40"如果你没有手动对齐小数位。使用整数数组可以解决问题,因为数学例程将自动考虑所有数学类型的小数位对齐。

要解决此问题,您需要执行例程

  1. 收集第一个数字的所有数字。
  2. 收集第二个数字的所有数字。
  3. (假设你不处理小数位)向后执行加法(从那些位置向上),必要时进行。