gpt4 book ai didi

C++:关于在 bitset 中插入

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:40 25 4
gpt4 key购买 nike

使用 STD 位集。我正在将字符串转换为二进制 using this answer .如果我这样做它就有效

string myString = "Hi";
for ( int i = 0; i < myString.size(); ++i)
{
cout << bitset<8>(myString.c_str()[i]) << endl;
}

如果我这样做就可以了

string myString = "Hi";
for ( int i = 0; i < myString.size(); ++i)
{
cout << bitset<8>foo(myString.c_str()[i]) << endl;
}

但这行不通,我想知道为什么

string myString = "Hi";
bitset<8>foo;

for ( int i = 0; i < myString.size(); ++i)
{
cout <<foo(myString.c_str()[i]) << endl;
}

我得到 no match for call to ‘(std::bitset<8>) (const char&)’

我想我知道如何修复它,但我不明白为什么会这样?声明后不能插入bitset吗?

让我们再试一次,像这样的东西会起作用

for (std::size_t i = 0; i < myString.size(); ++i)
{
bitset<8>bar(myString.c_str()[i]);
foo[i] = bar[i];
}

现在这可以工作了,但是在 foo 中只存在 8 位bar 中的一切都是正确的另外我不喜欢它,它似乎有很多代码。

我只想声明foo然后在循环中插入位,我错过了什么?我不想使用任何第三方库。

最佳答案

这是 type(arguments) 语法和 value(arguments) 语法之间的区别,前者使用构造函数创建对象,后者调用函数或对象的调用运算符。

bitset 有一个采用整数类型的构造函数,但它没有调用运算符。

不过,我不明白总体目标。如果你想写出每个字符的位,第一种方法有效。 (第二个片段无法编译。)您希望通过不同的第三个片段实现什么?如果你想收集所有字符的所有位,你的位集不够大;它只有 8 位的空间。

附带说明,s.c_str()[i] 是不必要的。使用 s[i],或者更好的是,对字符串使用 for-range 循环:

for (auto c : myString) {...}

关于C++:关于在 bitset 中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48170788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com