繁体   English   中英

如何将输入存储到数组中? C ++

[英]how to store an input into an array? C++

int b;
int array[12];

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

(例如:b将是10100)

**如何将b(10100)存储到数组中,使其为[1] [0] [1] [0] [0] **

cout << array[0] << endl;

**输出应为1 **

cout << array[1] << endl;

**输出应为0 **

请帮忙谢谢。

string也可以视为char的数组。 所以你可以输入一个字符串,而你写的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之外,这几乎是与问题一起发布的原始代码。

您可以使用boot动态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";
}

如果没有boost,请使用std :: bitset。
std :: 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";
}

我原本写了一个类似于Pablo的答案,但看到他已经发布了它,这里更符合所提供的信息。

它接受一个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;
}

这个动态地设置数组的大小,使其正确匹配。

以下示例根据需要将位存储到原始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. ..

将二进制数存储到阵列中


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.

对于您的输入,输出将是:

1
0

这里我们有一个字符数组。 我们将二进制数输入到数组中,然后打印数组的每个元素以显示每个位。 第一个打印行访问第一个元素[1] [0] [1] [0] [0]。 第二个打印行访问第二个元素[1] [0] [1] [0] [0]。

假设我们有一个包含100个字符的二进制数。 我们输出数组的每个元素的方式需要很长时间。

1.)您能想到一种更有效的打印阵列内容的方法吗?

2.)我们如何确保用户只输入一个和/或零?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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