如何在 C++ 中创建一个 Bitset 数组
how to create an array of Bitset in c++
我想创建一个 Bitset 数组。Binary Bitset(例如“100”、“1010”等)
之后我想从用户输入并存储在 Bitset 中。
我尝试了以下行,但显示错误。
#include<bits/stdc++>
using namespace std;
int main()
{
int n,i;
string bit_string;
cin>>n // size of Bitset array.
bitset<8> brr[n];//
for(i=0;i<n;i++)
{
cin>>bit_string;
brr[i](bit_string);
}
return 0;
}
我想创建 n 个大小为 8 的位集 bits.Where n 由用户提供。
我的输入是二进制字符串。
“110010”,“001110”
请帮忙
错误发生是因为您试图使用 n
创建 C 样式数组,这不是编译时常量。如果在编译时 n
已知,则无法创建 C 样式数组。
以下是做你想做的好方法
创建一个 std::vector<std::bitset<8>>
来存放你的 bitset<8>
,如下所示。
请注意,代码会忽略输入字符串中多余的字符,如 "111111110"
(使其成为 "11111111"
),并将除 '1'
之外的任何字符视为 '0'
并且如果输入字符串少于 8 个字符,代码将默认添加零 bitset
s
#include <vector>
#include <bitset>
#include <iostream>
int main() {
int n, i;
std::string bit_string;
std::cout << "Enter the size";
std::cin >> n; // size of Bitset array.
std::vector<std::bitset<8>> brr(n);//
for (i = 0; i < n; i++) {
std::cin >> bit_string;
for (int j{}; j < bit_string.size() && j < 8; ++j) {
brr[i][j] = (bit_string[j] == '1') ? 1 : 0;
}
}
//To test
for(auto const& el :brr)
{
for(int i{}; i < 8;)
std::cout << el[i++];
std::cout<<"\n";
}
}
见Why is "using namespace std;" considered bad practice?
和
对于对象的动态计数,请尝试使用 vector<> 而不是 array[]
#include<bits/stdc++>
using namespace std;
int main()
{
int n, i;
string bit_string;
cin >> n; // size of Bitset array.
vector<bitset<8>> arr; //size()=>0
arr.resize(n); //size()=>n
for (i = 0; i < n; i++)
{
cin >> bit_string;
bitset<8>& br = arr[i]; //get the i of n
int maxlen = 8;
if (bit_string.size() <= 8)
maxlen = bit_string.size();
else
cout << "warning invalid len " << bit_string.size() << " of " << bit_string << endl;
for (int j = 0; j < maxlen; j++)
{
if (bit_string[j] == '1')
br.set(j, true);
}
//cout << endl << br << endl; //output test
}
return 0;
}
如果你还想使用数组,请尝试这种方式
#include<bits/stdc++>
using namespace std;
int main()
{
int n, i;
string bit_string;
cin >> n; // size of Bitset array.
bitset<8>* arr = new bitset<8>[n];
for (i = 0; i < n; i++)
{
cin >> bit_string;
bitset<8>& br = arr[i]; //get the i of n
int maxlen = 8;
if (bit_string.size() <= 8)
maxlen = bit_string.size();
else
cout << "warning invalid len " << bit_string.size() << " of " << bit_string << endl;
for (int j = 0; j < maxlen; j++)
{
if (bit_string[j] == '1')
br.set(j, true);
}
//cout << endl << br << endl; //output test
}
delete[] arr; //IMPROTAND , delete the array and free memory
return 0;
}
我想创建一个 Bitset 数组。Binary Bitset(例如“100”、“1010”等) 之后我想从用户输入并存储在 Bitset 中。 我尝试了以下行,但显示错误。
#include<bits/stdc++>
using namespace std;
int main()
{
int n,i;
string bit_string;
cin>>n // size of Bitset array.
bitset<8> brr[n];//
for(i=0;i<n;i++)
{
cin>>bit_string;
brr[i](bit_string);
}
return 0;
}
我想创建 n 个大小为 8 的位集 bits.Where n 由用户提供。 我的输入是二进制字符串。 “110010”,“001110” 请帮忙
错误发生是因为您试图使用 n
创建 C 样式数组,这不是编译时常量。如果在编译时 n
已知,则无法创建 C 样式数组。
以下是做你想做的好方法
创建一个 std::vector<std::bitset<8>>
来存放你的 bitset<8>
,如下所示。
请注意,代码会忽略输入字符串中多余的字符,如 "111111110"
(使其成为 "11111111"
),并将除 '1'
之外的任何字符视为 '0'
并且如果输入字符串少于 8 个字符,代码将默认添加零 bitset
s
#include <vector>
#include <bitset>
#include <iostream>
int main() {
int n, i;
std::string bit_string;
std::cout << "Enter the size";
std::cin >> n; // size of Bitset array.
std::vector<std::bitset<8>> brr(n);//
for (i = 0; i < n; i++) {
std::cin >> bit_string;
for (int j{}; j < bit_string.size() && j < 8; ++j) {
brr[i][j] = (bit_string[j] == '1') ? 1 : 0;
}
}
//To test
for(auto const& el :brr)
{
for(int i{}; i < 8;)
std::cout << el[i++];
std::cout<<"\n";
}
}
见Why is "using namespace std;" considered bad practice?
和
对于对象的动态计数,请尝试使用 vector<> 而不是 array[]
#include<bits/stdc++>
using namespace std;
int main()
{
int n, i;
string bit_string;
cin >> n; // size of Bitset array.
vector<bitset<8>> arr; //size()=>0
arr.resize(n); //size()=>n
for (i = 0; i < n; i++)
{
cin >> bit_string;
bitset<8>& br = arr[i]; //get the i of n
int maxlen = 8;
if (bit_string.size() <= 8)
maxlen = bit_string.size();
else
cout << "warning invalid len " << bit_string.size() << " of " << bit_string << endl;
for (int j = 0; j < maxlen; j++)
{
if (bit_string[j] == '1')
br.set(j, true);
}
//cout << endl << br << endl; //output test
}
return 0;
}
如果你还想使用数组,请尝试这种方式
#include<bits/stdc++>
using namespace std;
int main()
{
int n, i;
string bit_string;
cin >> n; // size of Bitset array.
bitset<8>* arr = new bitset<8>[n];
for (i = 0; i < n; i++)
{
cin >> bit_string;
bitset<8>& br = arr[i]; //get the i of n
int maxlen = 8;
if (bit_string.size() <= 8)
maxlen = bit_string.size();
else
cout << "warning invalid len " << bit_string.size() << " of " << bit_string << endl;
for (int j = 0; j < maxlen; j++)
{
if (bit_string[j] == '1')
br.set(j, true);
}
//cout << endl << br << endl; //output test
}
delete[] arr; //IMPROTAND , delete the array and free memory
return 0;
}