想要找到二进制代码字

时间:2017-06-21 15:20:47

标签: c++ xcode list vector binary

我制作了一个程序,其中我保留了一个随机二进制代码字(例如1001101)的字符串,我希望能够创建一个列表或向量,告诉我1或0的位置。例如,1的位置列表将是{1,4,5,7}。而且我还想知道如何反过来。例如,0的位置列表可以是{6,3,2}。我没有代码可以显示,因为我真的无法解决这个问题。我在这里找不到任何能帮助我的东西。谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用二进制和&轻松测试是否设置了特定位。

例如,要测试foo中是否设置了位3,您可以

bool is_set = foo & 0b100;

如果设置了第三位,则is_set将为true,否则为false

在一个函数中包装它,你可以传入一个整数和你感兴趣的位数,然后得到一个bool,说明它是否被设置是微不足道的。

使用这样的函数,应该很容易构建所有集合和所有未设置位的列表。

如果您的代码字是一个字符串,您可以a)首先将其转换为整数,然后按照上面的描述进行操作,或者b)重复字符串并针对' 0'测试每个字符。或者' 1'并根据结果将当前位置添加到右侧。

答案 1 :(得分:0)

您可以执行以下操作:Link

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>

using namespace std;

/*
 *Find all positions of the a SubString in given String
 */
void findAllOccurances(std::vector<size_t> & vec, std::string data, std::string toSearch)
{
    // Get the first occurrence
    size_t pos = data.find(toSearch);

    // Repeat till end is reached
    while( pos != std::string::npos)
    {
        // Add position to the vector
        vec.push_back(pos+1); //Added 1, we start to count positions at 1 instead of 0

        // Get the next occurrence from the current position
        pos =data.find(toSearch, pos + toSearch.size());
    }
}

int main()
{
    std::string data = "1001101";

    std::vector<size_t> vec;

    // Get All occurrences of the '1' in the vector 'vec'
    findAllOccurances(vec, data , "1");

    std::cout<<"All Index Position of '1' in given string are,"<<std::endl;

    for(size_t pos : vec)
        std::cout<<pos<<std::endl;

    std::vector<size_t> vec0;
    // Get All occurrences of the '0' in the vector 'vec0' backwards
    findAllOccurances(vec0, data , "0");

    std::cout<<"All Index Position of '0' in given string backwards are,"<<std::endl;

    std::reverse_copy(vec0.begin(), vec0.end(), std::ostream_iterator<int>(std::cout, "\n"));

    return 0;
}

Live sample!

输出:

  

&#39; 1&#39;的所有索引位置在给定的字符串中,
1 1 4   
7&#39; 0&#39;的所有索引位置在给定的字符串向后是,   
6
3
2

答案 2 :(得分:-1)

我认为这可能会对你有帮助。

#include <iostream>
#include <vector>
#include <string>

using namespace std;
int main(){
    string binary_string;
    cin >> binary_string;
    vector <int> position_of_ones,position_of_zeroes;
    for(int i = 0; i < binary_string.length(); i++){
        if(binary_string[i] == '0'){
            position_of_zeroes.push_back(i+1);
        }
        else{
            position_of_ones.push_back(i+1);
        }
    }

    cout << "Position of 0s" << endl;
    for(int i = 0; i < position_of_zeroes.size(); i++){
        if(i != 0)    cout << ",";
        cout << position_of_zeroes[i];
    }
    cout << endl;
    cout << "Position of 1s" << endl;
    for(int i = 0; i < position_of_ones.size(); i++){
        if(i != 0)    cout << ",";
        cout << position_of_ones[i];
    }
    cout << endl;
 }

现在你可以使用这些载体了。