2009-12-07 146 views
11

我想將一個整數轉換成一個數組,所以它看起來像下面這樣:轉換整數數組

int number = 123456 ; 
int array[7] ; 

與結果:

array[0] = 1 
array[1] = 2 
... 
array[6] = 6 
+5

您能解釋一下您已經嘗試過的自己,以及它爲什麼不起作用嗎? – catchmeifyoutry 2009-12-07 16:14:54

+0

這是功課,但我會咬。直到我向她解釋之前,我的妻子才真正理解這一點。 – Broam 2009-12-07 16:15:58

+8

你的「...」出現問題。數組中有7個成員,但只有6個十進制數字。 – 2009-12-07 16:30:44

回答

0

最簡單的方法我能想象現在是:

char array[40]; 
int number = 123456; 

memset(array, 0x00, sizeof(array)); 

sprintf(array, "%d", number); 

此外,您可以將每個數字轉換爲int,只需將0x30減去char值即可。

編輯如果這是一項家庭作業,您的老師可能會要求您使用%運算符編寫程序(例如12%10 = 2)。如果是這樣的情況下,良好的功課;-)

+0

這是一個字符數組,而不是一個int數組 – catchmeifyoutry 2009-12-07 16:15:57

+0

如果你打算用sprintf,請至少使用的snprintf – philsquared 2009-12-07 16:16:33

+0

我知道它是一個字符數組,但你可以很容易地轉換爲int通過的0x30減去char值,因爲我觀察在答案中。 snprintf不是C標準。 – Andres 2009-12-07 16:20:01

4

您可以提取號碼的最後一位數字是這樣的:

int digit = number % 10; 
number /= 10; 

請注意,您也應該檢查是否number爲正。其他值需要額外處理。

0

您可以使用模數來確定最後一位數字。

而且您可以使用division將另一個數字移到最後一位數字的位置。

8

只需使用模運算:

int array[6]; 
int number = 123456; 
for (int i = 5; i >= 0; i--) { 
    array[i] = number % 10; 
    number /= 10; 
} 
+4

如何解釋實際解釋方法的答案,以便OP *獲知某些東西? – jalf 2009-12-07 16:21:40

+0

此外,這是硬編碼處理6位數字 – philsquared 2009-12-07 16:22:19

+0

這將只適用於6位數的非負整數。 – 2009-12-07 16:22:59

22

也許是更好的解決方案是向後工作:

123456 % 10 = 6

123456/10 = 12345

12345 % 10 = 5

12345/10 = 1234

1

取數字的log10得到數字的位數。把它放在pos中,然後在一個循環中取模10(n % 10),把結果放在數組中的位置pos。遞減pos並將數字除以10.重複至pos == 0

如果該符號爲負數,您希望如何處理該符號?

0

你不能簡單地「轉換」它。整數不是用十進制表示法的軟件表示的。所以你想要的個人數字不存在存在。他們必須計算。

因此,給定一個任意數字,你如何確定數量?

我們可以除以十,然後取其餘部分:對於123,該部門將給出12,然後剩下的是3.所以我們有3個。 12告訴我們我們已經過去了那些,所以它可以作爲我們下一次迭代的輸入。我們拿這個,除以10,得到1,餘數爲2.所以我們在十個地方有兩個,剩下一個爲數百個工作。除以10,即給我們零,餘數爲1。所以我們在數百個地方得到1個,在十個地方得到2個,在那個地方得到3個。我們完成了,因爲最後一個分區歸零。

0

,如果這是真的功課然後顯示它您的老師 - 只是爲了好玩;-)

小心!性能非常差,以達到你所期望,一般在家裏不這樣做;-)

#include <algorithm> 
#include <iostream> 
#include <sstream> 
#include <string> 
#include <vector> 

typedef std::vector<int> ints_t; 

struct digit2int 
{ 
    int operator()(const char chr) const 
    { 
     const int result = chr - '0'; 
     return result; 
    } 
}; 

void foo(const int number, ints_t* result) 
{ 
    std::ostringstream os; 
    os << number; 
    const std::string& numberStr = os.str(); 
    std::transform(
     numberStr.begin(), 
     numberStr.end(), 
     std::back_inserter(*result), 
     digit2int()); 
} 

int main() 
{ 
    ints_t array; 
    foo(123456, &array); 
    std::copy(
     array.begin(), 
     array.end(), 
     std::ostream_iterator<int>(std::cout, "\n")); 
} 
0

如果你想變成一個字符串,那麼這將是很容易的效果(工作)笨拙的方式,只是做別人都在說關於使用%運算符:

比方說,NUM = 123,我們可以這樣做:

string str; 
while (num > 0) 
{ 
    str = (num % 10) + str; //put last digit and put it into the beginning of the string 
    num = num /10; //strip out the last digit 
} 

現在你可以使用str作爲字符數組。用數組做這件事是一件麻煩事,因爲把事情放在數組的開始部分需要你移動其他的東西。我們可以做的是,我們可以將每個數字放入一個字符串中,而不是將每個數字放入一個字符串中。它會按照這樣的倒序排列:3 2 1.然後我們可以從最前面的數字中逐個彈出,並按照正確的順序將它們放入數組中。你的數組看起來像這樣:1 2 3.由於這是作業,我將把實現留給你。

@Broam有一個很好的解決方案,但正如他所說,它是爲了倒退。我認爲OP或者任何進入這個線程的人都會希望它轉發,這就是爲什麼我發佈這個。如果你有更好的解決方案,請回復,我也很感興趣。

2

在這裏,我想到了,integerToArray函數返回從整數值轉換的向量。您可以使用主要功能對其進行測試:

#include <iostream> 
#include <vector> 
using namespace std; 

vector <int> integerToArray(int x) 
{ 
    vector <int> resultArray; 
    while (true) 
    { 
    resultArray.insert(resultArray.begin(), x%10); 
    x /= 10; 
    if(x == 0) 
     return resultArray; 
    } 
} 

int main() 
{ 
    vector <int> temp = integerToArray(1234567); 
    for (auto const &element : temp) 
     cout << element << " " ; 
    return 0; 
} 

//outputs 1 2 3 4 5 6 7