[英]how to create an array of Bitset in c++
我想创建一个 Bitset 数组 .Binary Bitset(example "100","1010",etc) 之后我想从用户输入并存储在 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 Bitset,每个大小为 8 位。其中 n 由用户提供。 我的输入是二进制字符串。 “110010”、“001110”请帮忙
发生错误是因为您尝试使用n
创建 C 样式数组,而n
不是编译时常量。 不可能在编译时不知道n
情况下创建 C 风格的数组。
以下是做你想做的好方法
创建一个std::vector<std::bitset<8>>
来保存您的bitset<8>
s,如下所示。
请注意,该代码忽略了字符串 iput 中的多余字符,例如"111111110"
(使其成为"11111111"
)并将除'1'
之外'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";
}
}
请参阅为什么“使用命名空间 std;” 被认为是不好的做法? 为什么我不应该#include <bits/stdc++.h>?
对于对象的动态计数,请尝试使用 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.