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 **
请帮助谢谢。
答案 0 :(得分:8)
string
也可以视为char
的数组。所以你可以输入一个字符串,而你写的cout
语句应该可以工作。但是,它们将是char
而不是整数,因此您将存储'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
之外,这几乎是与问题一起发布的原始代码。
答案 1 :(得分:1)
您可以使用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";
}
如果没有提升,请使用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";
}
答案 2 :(得分:1)
我原本写了一个类似于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;
}
这个动态设置数组的大小,使其正确匹配。
答案 3 :(得分: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. ..
答案 4 :(得分:0)
将二进制数存储到阵列中
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.。)我们如何确保用户只输入一个和/或零?