2012-06-26 273 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);