2011-08-03 4 views
3
int b; 
int array[12]; 

cout << "Enter binary number: "; 
cin >> b; 

:입력을 배열에 저장하는 방법은 무엇입니까? C++

(예를 들어 B는 10,100 것) ** 배열로 B (10100)를 저장하는 데 어떻게있을 것이다되도록 [1] [0] [1] [0] 0] **

cout << array[0] << endl; 

** 출력은 1 **

cout << array[1] << endl; 

이 ** 출력이 0 **

당신을 감사 도와주세요해야해야한다.

+0

일종의 숙제입니까? –

+0

숙제가 아니라 문제가 있으므로 예제가 시작될 때 수업에서 어려움을 겪지 않을 것입니다. – Junior89

+0

@Kit Ho 또한 소프트웨어 엔지니어로서 C++을 프로그래밍 및/또는 사용합니까? – Junior89

답변

7

은 또한 chars의 어레이로서 처리 될 수있다. 따라서 문자열 대신 입력을받을 수 있으며 작성한 cout 문을 사용해야합니다. 추가 된 : 그러나, 그들은 char의하지의 int 될 것입니다, 그래서 당신은 그들 사이의 변환 '1'과 '0'대신에 1과 0을 저장하는 것입니다 단지 array[0]-'0'

#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    string array; 
    cout << "Enter binary number: "; cin >> array; 
    // Suppose the user inputs 10100 
    cout << array[0] << endl; // outputs '1' 
    cout << array[1] << endl; // outputs '0' 
    cout << array[2] << endl; // outputs '1' 

    return 0; 
} 

업데이트를 사용하여 쉽게 컴파일 가능한 코드. string을 입력하는 것을 제외하고는이 질문과 함께 게시 된 원래 코드와 거의 같습니다. 당신이 부스트가 표준 : 비트 세트를 사용하지 않은 경우

+0

OP가 어디에서나 문자열을 사용하고 있지 않습니다. –

+0

감사합니다. 귀하의 도움에 감사하지만, 귀하가 작성한 정보는 어디에서 가져 옵니까? 죄송 합니다만,이 글에서 미안 해요, 실제로 배열에 바이너리를 "저장"하는 방법을 모르겠습니다. – Junior89

+0

@Chris 그는 그것을 사용하지 않았 음에 동의합니다. 그러나 문제를 해결하는 가장 간단한 방법이라고 생각합니다. 그는 그것을 게시했습니다 (또는 오히려, 그것을 이해했습니다!). – Pablo

1

당신은 부츠 동적 비트 세트

#include "boost/dynamic_bitset.hpp" 
#include <sstream> 
#include <iostream> 

int main() 
{ 
    boost::dynamic_bitset<>  val; 
    std::stringstream   input("1010101010"); 

    input >> val;      // Input a binary number 
             // Can use std::cin or another stream 
    std::cout << val.to_ulong() << "\n"; 
    std::cout << val[5] << "\n"; 
} 

를 사용할 수 있습니다. 표준과
유일한 문제 ::을 BitSet에 내가 원래 파블로 비슷한 대답을 쓴했다

#include <bitset> 
#include <sstream> 
#include <iostream> 

int main() 
{ 
    std::bitset<16>    val;  // fixed 16 bit size 

    std::cout << "Enter binary number:\n"; 
    std::cin >> val;      // Input a binary number 
             // Can use std::cin or another stream 
    std::cout << val.to_ulong() << "\n"; 
    std::cout << val[5] << "\n"; 
} 
+0

안녕하세요, 코드에 오류가 있습니다./ – Junior89

+0

@ Junior89 : 그러면 뭔가 잘못하고있는 것입니다. 조금 더 구체적 일 수 있습니까? 참고 : boost (컴파일러 바로 다음에 설치하는 C++ 프로그램 중 하나 인)를 사용합니다. 부스트가 없거나 부스트를 선택하기 위해 포함 경로를 설정하지 않은 경우 컴파일이 실패합니다. –

+0

@ Junior89 : std :: bitset 버전을 확인하십시오 –

1

고정 된 크기를 가지고,하지만 그는 이미 게시로보고, 여기에 주어진 정보를 한 번 더 일치 .

int 입력을 받아 int array에 넣습니다.

#include <iostream> 
#include <cmath> 

int main() 
{ 
    int b; 
    int numDigits; 

    // Get bit string int 
    std::cin >> b; 

    // Get the number of digits 
    numDigits = std::floor(std::log10((float)std::abs(b != 0 ? b : 1))) + 1; 

    // Dynamically create a new array of the appropriate size 
    int* arr = new int[ numDigits ]; 

    // Initialize all the blocks of memory 
    std::memset(arr, 0, numDigits); 

    // Fill the array 
    for(int i = 0; i < numDigits; i++) 
    { 
     arr[ numDigits - i - 1 ] = b % 10; 
     b /= 10; 
    } 

    system("PAUSE"); 

    // Delete the array 
    delete [] arr; 

    return 0; 
} 

이 문자는 올바르게 배열 크기를 동적으로 설정합니다.

+0

코드가 실행되지만 아무 것도하지 않습니다. 컴파일 할 때 이진수를 삽입하고 크기를 시도했지만 "가져 오기 위해 계속하려면 아무 키나 누르십시오." – Junior89

+0

@ Junior89 예, 의도 한 것입니다. 배열이 채워지면 원하는대로 배열해야합니다. 숫자를 가져 와서 배열로 나눕니다. – ssell

1

다음 예제에서는 필요에 따라 비트를 원시 C 스타일 배열에 저장합니다. 그러나 원하는 경우 std :: vector로 바꿀 수 있습니다.

int main() 
{ 
    // assume sizeof(int) is 32, or you can use heap-allocated array or std::vector 
    int array[32]; 

    unsigned int mask = 1; 
    // mask is initially 0x80000000 
    mask = mask << (sizeof(int)*8 - 1); 

    int i = 0; 

    // we start counting from the first "1", 
    // preceding "0"s are ignored to display 
    bool started = false; 

    int b; 
    cin >> b; 

    while (mask != 0) 
    { 
    // if current bit is "1" or "0" 
    if (mask & b) 
    { 
     started = true; 
     array[i++] = 1; 
    } 
    // if current bit is "0" and counting started 
    else if (started) 
    { 
     array[i++] = 0; 
    } 
    // ready to test next bit 
    mask = mask >> 1; 
    } 

    // test result 
    for (int j = 0; j < i; ++j) cout << array[j]; 

    cout << endl; 
    return 0; 
} 

Test cases: 
1. b = 8 => array: 1000 
2. b = -8 => array: 11111111111111111111111111111000 
3. .. 
0

출력이 될 것입니다 귀하의 의견에 대한 ARRAY


char binaryArray [5]; // The array looks like this: [][][][][] 

cout << "Enter binary number: "; 
cin >> binaryArray; // Stores the binary number into the array: [1][0][1][0][0] 

cout << binaryArray[0] << endl; // The first element is sent to standard output. 
cout << binaryArray[1] << endl; // The second element is sent to standard output. 

에 BINARY 번호를 저장 : 여기

1 
0 

우리는 문자의 배열을 가지고있다. 배열에 이진수를 입력 한 다음 배열의 각 요소를 인쇄하여 각 비트를 표시합니다. 첫 번째 인쇄 라인은 첫 번째 요소 [1] [0] [1] [0] [0]에 액세스합니다. 두 번째 인쇄 라인은 두 번째 요소 [1] [0] [1] [0] [0]에 액세스합니다.

이진수가 100 자라고 가정 해 보겠습니다. 배열의 각 요소를 출력하는 방법은 시간이 오래 걸립니다.

1.) 배열의 내용을보다 효율적으로 출력하는 방법을 생각해 볼 수 있습니까?

2.) 사용자가 1과 0 만 입력하는 것을 어떻게 보장 할 수 있습니까?

+0

정말로 도움이되는 코드에 대해 고마워요.하지만 이것은 내 프로그램의 시작을위한 것입니다. 내 프로그램이해야 할 일은 입력 된 이진수를 읽은 다음 c0 ++ rand (1, c1)을 제외하고 0을 반환하는 각 1 c1 ++ cout에 대해 그 번호를 반환하는 것입니다.내가하려는 것은 이진 입력에서 상태를 보여주기 때문에 "상태"를 출력하는 것입니다. 예를 들어 이진수가 100 인 경우 1s + 1보다 0이 더 많으므로 유효하지 않습니다. 10100을 입력하면 출력은 1,2, rand (1, c1), 3, rand (1, c1), rand (1, c1)이됩니다. 내가해야 할 일을 얻는거야? lol – Junior89

+0

기다림 100은 유효하지 않을 것이다, 미안. – Junior89

관련 문제