2012-06-26 4 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

Concat все числа в виде строки и затем преобразовать, что номер

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

Я знаю, что вопрос не слишком конкретный, но я бы предположил, что элементы массива могут быть произвольными (до точки, где он не переполняет целое число). Hardcoding строковое значение не обойдется. Тем не менее, функция является хорошим альтернативным стартом (при условии, что у вас есть 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); 
Смежные вопросы