繁体   English   中英

如何在 C++ 中创建一个 Bitset 数组

[英]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.

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