我想將一個整數轉換成一個數組,所以它看起來像下面這樣:轉換整數數組
int number = 123456 ;
int array[7] ;
與結果:
array[0] = 1
array[1] = 2
...
array[6] = 6
我想將一個整數轉換成一個數組,所以它看起來像下面這樣:轉換整數數組
int number = 123456 ;
int array[7] ;
與結果:
array[0] = 1
array[1] = 2
...
array[6] = 6
最簡單的方法我能想象現在是:
char array[40];
int number = 123456;
memset(array, 0x00, sizeof(array));
sprintf(array, "%d", number);
此外,您可以將每個數字轉換爲int,只需將0x30減去char值即可。
編輯如果這是一項家庭作業,您的老師可能會要求您使用%運算符編寫程序(例如12%10 = 2)。如果是這樣的情況下,良好的功課;-)
這是一個字符數組,而不是一個int數組 – catchmeifyoutry 2009-12-07 16:15:57
如果你打算用sprintf,請至少使用的snprintf – philsquared 2009-12-07 16:16:33
我知道它是一個字符數組,但你可以很容易地轉換爲int通過的0x30減去char值,因爲我觀察在答案中。 snprintf不是C標準。 – Andres 2009-12-07 16:20:01
您可以提取號碼的最後一位數字是這樣的:
int digit = number % 10;
number /= 10;
請注意,您也應該檢查是否number
爲正。其他值需要額外處理。
您可以使用模數來確定最後一位數字。
而且您可以使用division將另一個數字移到最後一位數字的位置。
只需使用模運算:
int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
array[i] = number % 10;
number /= 10;
}
如何解釋實際解釋方法的答案,以便OP *獲知某些東西? – jalf 2009-12-07 16:21:40
此外,這是硬編碼處理6位數字 – philsquared 2009-12-07 16:22:19
這將只適用於6位數的非負整數。 – 2009-12-07 16:22:59
也許是更好的解決方案是向後工作:
123456 % 10 = 6
123456/10 = 12345
12345 % 10 = 5
12345/10 = 1234
取數字的log10得到數字的位數。把它放在pos
中,然後在一個循環中取模10(n % 10
),把結果放在數組中的位置pos
。遞減pos
並將數字除以10.重複至pos == 0
如果該符號爲負數,您希望如何處理該符號?
你不能簡單地「轉換」它。整數不是用十進制表示法的軟件表示的。所以你想要的個人數字不存在存在。他們必須計算。
因此,給定一個任意數字,你如何確定數量?
我們可以除以十,然後取其餘部分:對於123,該部門將給出12,然後剩下的是3.所以我們有3個。 12告訴我們我們已經過去了那些,所以它可以作爲我們下一次迭代的輸入。我們拿這個,除以10,得到1,餘數爲2.所以我們在十個地方有兩個,剩下一個爲數百個工作。除以10,即給我們零,餘數爲1。所以我們在數百個地方得到1個,在十個地方得到2個,在那個地方得到3個。我們完成了,因爲最後一個分區歸零。
有關C/C++版本(以及其他語言)的SO問題Language showdown: Convert string of digits to array of integers?。
,如果這是真的功課然後顯示它您的老師 - 只是爲了好玩;-)
小心!性能非常差,以達到你所期望,一般在家裏不這樣做;-)
#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"));
}
如果你想變成一個字符串,那麼這將是很容易的效果(工作)笨拙的方式,只是做別人都在說關於使用%運算符:
比方說,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或者任何進入這個線程的人都會希望它轉發,這就是爲什麼我發佈這個。如果你有更好的解決方案,請回復,我也很感興趣。
在這裏,我想到了,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
您能解釋一下您已經嘗試過的自己,以及它爲什麼不起作用嗎? – catchmeifyoutry 2009-12-07 16:14:54
這是功課,但我會咬。直到我向她解釋之前,我的妻子才真正理解這一點。 – Broam 2009-12-07 16:15:58
你的「...」出現問題。數組中有7個成員,但只有6個十進制數字。 – 2009-12-07 16:30:44