Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 添加两个数组_C_Arrays_Addition - Fatal编程技术网

C 添加两个数组

C 添加两个数组,c,arrays,addition,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 = 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"
加法结果将是错误的

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

您有一个字符数组,因此,编码在字符串中的数字不能识别为数字。这样做的副作用是程序在加法例程中找不到并对齐小数点

如果不手动对齐小数点,则“10”+“3”将在“40”行中显示一些内容。使用整数数组可以解决这个问题,因为数学例程将自动为所有数学类型计算小数点对齐

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

  • 收集第一个数字的所有数字
  • 收集第二个数字的所有数字
  • (假设不处理小数点)向后执行加法(从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
    函数不返回它占用了多少位数。因此
    i++将跳过太少的数字,除非添加1位数字。此外,使用一个变量(
    i
    )将索引保存到两个字符串中,只有当每个字符串中的数字从相同的索引开始时,即当每个元素具有相同数量的数字时,才有效

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

  • a1
    a2
    数组中使用单独的指针。每个指针都将指向已读取的数组部分。这样,从每个字符串中读取两个整数后,一个指针将指向“10”的结尾,另一个指针指向“5”的结尾
  • 使用,它返回指向函数已读取的字符串部分结尾的指针。然后,您可以使用此指针跳过数字,然后(手动)跳过空白,直到碰到下一个数字(使用
    isdigit
    )或NUL终止符

  • 请显示您的代码在操作之前必须如何计算整个内容。
    {1,10,20}
    表示
    11020
    1*100+10*10+20*1
    ?? 你的意思是不是?看起来你有一个字符数组。因此,它是分配给数组的字符串。然后进行逐字符加法。所以你的解释是错误的。
    temp1
    temp2
    a1
    a2
    有什么关系?