我已将此代码存储为以二进制序列输入的每个位1的位置。程序的输出不是所期望的。我得到的10100输出是0x7fff9109be00。这是代码:
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
bitset <5> inpSeq;
int x = 0;
int xorArray[x];
unsigned int i;
cout << "Enter a 5-bit sequence: \n";
cin >> inpSeq;
for ( i = 0; i < inpSeq.size(); i++)
{
if ( inpSeq[i] == 1 )
{
x = x+1;
xorArray[x] = i;
}
}
cout << xorArray << "\n";
}
为清晰起见而更新:我的想法是&#39; cout&lt;&lt; xorArray&#39;将打印位1的位置。
答案 0 :(得分:2)
我对你想要达到的目标有点不清楚,但我认为以下内容可能有所帮助。
#include <iostream>
#include <bitset>
#include <list>
using namespace std;
int main() {
bitset<5> inpSeq;
unsigned int i;
list<int> xorList;
cout << "Enter a 5-bit sequence: \n";
cin >> inpSeq;
for (i = 0; i < inpSeq.size(); ++i) {
if (inpSeq[i] == 1) {
xorList.push_back(i);
}
}
for (list<int>::iterator list_iter = xorList.begin();
list_iter != xorList.end(); list_iter++)
{
cout << *list_iter << endl;
}
return 0;
}
我使用列表的原因是因为您提到要存储1位的位置。该列表被用作这些职位的容器,以防您在程序的另一个点需要它们。
原始代码的一个问题是你为变量'x'赋值0.当你声明xorArray [x]时,这意味着你实际上是在创建一个长度为0的数组。这是不正确的语法。看起来您实际上是在尝试在运行时动态分配数组的大小。这需要不同的语法和指针用法。该列表允许您为遇到的每个1位增长数据结构。
此外,您无法使用
打印数组的值cout << xorArray << endl
那将打印数组中第一个元素的内存地址,因此,xorArray [0]。每当要打印数据结构(如列表或数组)的值时,都需要遍历结构并逐个打印值。这就是上面代码中第二个for()循环的目的。
最后,存储的值与0索引一致。如果您想要以1开头的仓位,则必须使用
xorList.push_back(i+1);
希望这有帮助!
答案 1 :(得分:2)
cout << xorArray << "\n";
这不会打印xorArray
的元素;它会打印出它的地址。
你必须迭代(“循环”)它:
for (auto x : xorArray)
cout << x << ' ';
cout << '\n';
你的另一个问题是你正在尝试使用C ++中不存在的可变长度数组。改为使用矢量。
现在 it gives you your desired output:
#include <iostream>
#include <bitset>
#include <vector>
using namespace std;
int main()
{
bitset<5> inpSeq("10111");
std::vector<int> xorArray;
for (unsigned int i = 0; i < inpSeq.size(); i++) {
if (inpSeq[i] == 1)
xorArray.push_back(i);
}
for (auto x : xorArray)
cout << x << ' ';
cout << '\n';
}
如果您因任何原因未使用C ++ 11,则可以采用传统方式执行最终循环:
for (std::vector<int>::const_iterator it = xorArray.begin(),
end = xorArray.end(),
it != end; ++it) {
cout << *it << ' ';
}
或天真的方式:
for (unsigned int i = 0; i < xorArray.size(); i++)
cout << xorArray[i] << ' ';