创建随机二进制字符串:如何在插入另一个字符串之前从to_string()中删除空字符'\ 0'

Foivos

我正在尝试创建一个由0和1组成的随机二进制字符串。在我的实现中,我生成随机整数0和1s,然后使用std :: to_string()将其类型转换为字符串并将其插入另一个字符串。我的问题是,似乎通过使用std :: to_string()插入“ 0”或“ 1”字符,我还插入了终止空字符“ \ n”,因此我将细绳。例如,假设我要创建一个由Nbits = 10个字符组成的字符串。在下面的实现中,我得到了一个10个元素的字符串,显示在屏幕上,但是字符串的大小是它的两倍。你知道我能避免这种情况吗?

大小的问题是我正在尝试编写遗传算法的二进制表示形式,并且我需要大小正确才能使交叉/变异运算符正确。

#include <iostream>
#include <string>
#include <random>

using namespace std;

std::random_device rd;    
std::mt19937 gen(rd());

// Random bit string generator 
string random_string(size_t Nbits){
    std::uniform_int_distribution<> int1(0,1);
    string s;
    s.resize(Nbits);
    for(size_t i=0; i<Nbits; i++)
            s.insert(i,to_string(int1(gen)));

    return s;
};

int main(){
    // Say I want a 10 bits random binary string 
    size_t Nbits=10;
    string s=random_string(Nbits);

    // If I print my string on screen, it has the correct number of entries: 
    cout<<s<<endl;
    // However the size of the string is not equal to the number of entries. 
    cout<<  "Number of bits is: "<< Nbits<<", length of string is "<< s.size()<<endl;

}

可能的输出:

1001111111
Number of bits is: 10, length of string is 20
WhozCraig

您的插入逻辑正在转换不需要的值。如果您已经知道每个位的可能结果,则没有理由为一串位转换数据:01

而且.insert()是错误的方法。您正在将数据堆叠到先前已确定大小的字符串中,从而添加了更多字符,而不是替换它们。您应该以空字符串开头,然后将数据推入,如果需要(但不是必需),则保留。

试试这个:

std::string random_string(size_t Nbits)
{
    std::uniform_int_distribution<> int1(0,1);
    string s;
    s.reserve(Nbits);
    for (size_t i=0; i<Nbits; i++)
        s.push_back(int1(gen) ? '1' : '0');
    return s;
};

另外,可以利用'0''1'保证根据标准保证它们是连续值的事实,或者可以这样做:

std::string random_str(size_t Nbits)
{
    std::string s;
    std::generate_n(std::back_inserter(s), Nbits,
        std::bind(std::uniform_int_distribution<char>('0', '1'),std::ref(gen)));
    return s;
}

有很多方法可以做到这一点,这里仅提及其中的几种。祝你好运。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

string [0]从字符串中获取第一个字符

给定一个二进制字符串,目标字符串中全为0

PySpark-如何根据条件将0的字符串前缀连接到另一个字符串列

从字符串中删除第一个字符(如果为0)

SQLite 插入查询将 0 修剪为插入字符串的第一个字符

在Python中使用Regex将一个字符串替换为另一个字符串:错误:re.error:位置0处的逃逸\ w错误

如何在python中判断一个字符串是否恰好有8个1和0

如果第一个字符为 0,则替换字符串的第一个字符

MYSQL - 在 SQL 查询输出中用字符串替换 0,用另一个字符串替换非 0,没有条件

如果仅允许一个操作,则二进制字符串将产生的最大二进制数,即K右旋转,其中K = [0,字符串长度]

使用$ str [0]获取字符串的第一个字符

IncrediBuild-错误:字符串的第一个字符应为“ 0”或“ 1”

查找二进制字符串中包含相等数量的0和1的最大子字符串

在二进制字符串中查找等于1和0的子字符串数

具有至少一个1和一个偶数0的二进制字符串的正则表达式

如何以1和0的字符串序列读取二进制文件?

如何将字符串“0bxxxx”转换为二进制?

匹配多个多列中的多个字符串,并创建一个是/否(1/0)列

在JavaScript中,确定字符串中第一个字符的最有效方法是:startsWith,charAt或[0]

cin >> int给定一个字符串,将int赋值为0

我可以将字符串存储在字符数组中但顺序相反,以便0(index)指向字符串中的最后一个字符吗?

如何在Lua中的另一个字符串中插入一个字符串?

如何在使用 Javascript 的字符串中出现另一个字符串标记之前插入字符串标记

将二进制(0 | 1)numpy转换为整数还是二进制字符串?

在另一个字符串中的某个单词之前插入字符串

将0和1个字符的字符串转换为十六进制字符串

如何从索引0、1或2开始每三个索引拆分一个字符串?

删除Haskell toBinary函数将数字转换为二进制字符串的前置“ 0”输出?

无法将1和0的字符串写入二进制文件,C ++