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