gpt4 book ai didi

c - 两个数组相加

转载 作者:行者123 更新时间:2023-11-30 15:27:33 24 4
gpt4 key购买 nike

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

假设

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

相加结果会错误。

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

最佳答案

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函数并没有返回它吞掉了多少个数字。因此,i++; 将跳过太少的数字,除非添加 1 位数字。此外,只有当每个字符串中的数字以相同索引开始时,即每个元素具有相同数量的数字时,使用一个变量 (i) 来保存两个字符串的索引才有效。

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

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

关于c - 两个数组相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26935158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com