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