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

질문이 너무 구체적이지는 않지만, 배열 요소가 임의적 일 수 있다고 생각합니다. 정수를 오버플로하지 않음). 문자열 값을 하드 코딩하는 것은 그 문제를 해결하지 못합니다. 이 함수는 좋은 대체 시작입니다 (C++ 11을 사용한다고 가정). – chris

3

해당 변환 :

  1. for 루프를 사용하여 문자열로 배열의 모든 정수 값을 변환합니다.
  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는 결과를 갖는다 : 603,215

+1

감사합니다. chris. 나는 그것을 편집했다. –

+1

몇 가지 다른 것들이 있습니다. 첫 번째는 Java-> C++입니다. 1. 배열은 C++의 클래스가 아니며 '길이'멤버가 없습니다. 일반적으로'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);