2012-06-26 496 views
3

想想我有一個像這樣的整數數組:a[0]=60; a[1]=321; a[2]=5;現在我想將整個數組轉換爲整數,例如int b在運行代碼後變成603215。怎麼做?將整數數組轉換爲數字

+2

我不得不說,我從來沒有想過這樣做,或看到任何人試圖做到這一點。獨創性的榮譽,或選擇一個隱藏在我身邊的問題。 – chris

+1

這是類似的,但比[這個問題]更簡單(http://stackoverflow.com/questions/11187898/how-to-concatinate-3-ints-into-unsigned-long-long/)。我的解決方案適用於這個問題,但由於您不關心格式化,所以'stringstream'解決方案似乎更簡單。 – juanchopanza

回答

11

使用std::stringstream

#include <iostream> 
#include <sstream> 

int main() { 
    std::stringstream ss; 
    int arr[] = {60, 321, 5}; 

    for (unsigned i = 0; i < sizeof arr/sizeof arr [0]; ++i) 
     ss << arr [i]; 

    int result; 
    ss >> result; 
    std::cout << result; //603215 
} 

注意,在C++ 11婉轉醜陋的循環可以用這個來代替:

for (int i : arr) 
    ss << i; 

而且,看如何有一個很好的可能性溢出,數字的字符串形式可以通過ss.str()訪問。爲了解決溢出問題,可能比嘗試將它塞進一個整數更容易。也應該考慮負值,因爲如果第一個值爲負數,這隻會起作用(並且是有意義的)。

+0

非常感謝你,尼斯答案:)) – Nofuzy

+0

非常感謝它的工作....... –

5

的毗連所有的數字作爲一個字符串,然後將其轉換成數字

#include <string> 
int b = std::stoi("603215"); 
+1

我知道這個問題不是太具體,但我會想象數組元素可以是任意的它不會溢出整數)。對一個字符串值進行硬編碼不會解決這個問題。不過,該函數是一個很好的替代開始(假設你有C++ 11)。 – chris

3

該算法將工作:

  1. 使用循環轉換陣列的所有整數值轉換爲字符串。
  2. 現在將所有字符串值追加到從索引0到數組長度的一個字符串。
  3. 再次將該字符串更改爲整數。
+1

我在閱讀時讓你的算法更容易遵循。 FFR,編輯空間頂部有一個編號列表按鈕。 – chris

4
int a[] = {60, 321, 5}; 

int finalNumber = 0; 
for (int i = 0; i < a.length; i++) { 
    int num = a[i]; 
    if (num != 0) { 
     while (num > 0) { 
      finalNumber *= 10; 
      num /= 10; 
     } 
     finalNumber += a[i]; 
    } else { 
     finalNumber *= 10; 
    } 
} 

finalNumber具有結果:

+1

謝謝克里斯。我編輯它。 –

+1

只是其他一些東西,第一個是Java-> C++:1.數組不是C++中的類,並且沒有'length'成員。因爲它提供了功能,所以使用'std :: vector'通常會更好。 2.「a」應該是「arr」。 – chris

+0

@Kalai謝謝你,尼斯和聰明的回答:)) – Nofuzy

2

迭代的陣列和將這些值轉換成字符串。然後連接它們並轉換回整數。

#include <string> 

int a[] = {60, 321, 5}; 
std::string num = ""; 
for(auto val : a) 
    num += a; 
int b = std::stoi(num);