我正在尝试使用C&#39 itoa
函数和C ++ setfill
和setw
函数生成二进制数。如果我仅使用itoa
,则显示的输出没有正确的0
填充。
这是一个小代码段。
int s = 8;
for (int i = 1; i<s;i++)
{
itoa(i,buffer,2);
cout<<setfill('0')<<setw(3)<<endl;
cout<<buffer<<endl;
}
现在它在打印输出方面做得很好。
如果我没有使用setfill和setw,格式化就像是
1
10
11
100
101
110
111
而不是
001
010
011
100
101
110
111
现在我想存储生成的填充二进制数并将其存储到向量中。有可能吗?
我想我有一个使用bitset的解决方案,它运行正常。
std::ostringstream oss;
int s = 3;
for (int i = 1; i<s;i++)
{
itoa(i,buffer,2);
oss<<setfill('0')<<setw(3);
oss<<buffer;
string s = oss.str();
cout<<s<<'\n'<<endl;
};
但是,我只是想指出我获得的解决方案看起来像这样!
可以通过在连续迭代中刷新流来操纵它。它只是一个事后的想法。
答案 0 :(得分:3)
考虑使用bitset
代替itoa
:
#include <bitset>
#include <iostream>
#include <string>
#include <vector>
int main() {
std::vector<std::string> binary_representations;
int s = 8;
for (int i = 1; i < s; i++)
{
binary_representations.push_back(std::bitset<3>(i).to_string());
}
}
编辑:如果你需要一个可变长度,一种可能性是
// Note: it might be better to make x unsigned here.
// What do you expect to happen if x < 0?
std::string binary_string(int x, std::size_t len) {
std::string result(len, '0');
for(std::string::reverse_iterator i = result.rbegin(); i != result.rend(); ++i) {
*i = x % 2 + '0';
x /= 2;
}
return result;
}
然后再
binary_representations.push_back(binary_string(i, 3));