简体   繁体   中英

how to store an input into an array? C++

int b;
int array[12];

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

(for example: b will be 10100)

** How to store b(10100) into an array so that it'll be [1][0][1][0][0] **

cout << array[0] << endl;

** output should be 1 **

cout << array[1] << endl;

** output should be 0 **

Please help thank you.

A string can also be treated as an array of char s. So you can get input into a string, instead, and the cout statements you wrote, should work. However, they will be char s and not ints, so you would be storing '1' and '0' instead of 1 and 0. Converting between them is easy, just use 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;
}

Update : Added compilable code. Note that this is pretty much the original code posted with the question, except for inputting a string .

You can use boots dynamic bitset

#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";
}

If you don't have boost use the std::bitset.
The only problem with std::bitset it has a fixed size

#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";
}

I had originally wrote up an answer similar to Pablo, but seeing as he already posted it, here is one more consistent with the information given.

It takes an int input and places it into an 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;
}

This one dynamically sets the size of the array so it fits correctly.

The following example stores bits to a raw C-style array as you require. But you can replace it with a std::vector if you want.

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. ..

STORING A BINARY NUMBER INTO AN 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.

For your input the output will be:

1
0

Here we have an array of characters. We input the binary number into the array and then we print each element of the array to display each bit. The first print line accesses the first element [1] [0] [1] [0] [0]. The second print line accesses the second element [1] [0] [1] [0] [0].

Let's say we had a binary number with 100 characters. The way that we output each element of the array would take a long time.

1.) Can you think of a more efficient way of printing out the contents of our array?

2.) How can we ensure that the user is inputting only ones and/or zeroes?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM