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”的末尾。
- 使用
strtol
function,它返回一个指向函数已读取的字符串部分末尾的指针。然后,您可以使用此指针跳过数字,然后(手动)跳过过去的空格,直到碰到下一个数字(使用isdigit
)或NUL终止符。
请显示您的代码如何计算整个事情 – Rizier123 2014-11-14 17:01:58
必须在操作之前进行归一化。 – BLUEPIXY 2014-11-14 17:04:14
'{1,10,20}'意味着'11020'或'1 * 100 + 10 * 10 + 20 * 1'?你的意思是吗? – BLUEPIXY 2014-11-14 17:05:48