0

我正在使用位置表示法将二进制转换为十进制,它的不同我猜没有人尝试过,但我猜,在这个我使用 for_each 循环这里有一些步骤:

  • 将二进制存储为字符串

- 使用 for_each 循环一次从字符串中取出一个数字并进行操作。

int main(void)
{
string input;
cout << "Enter string of binary digits " ;
cin >> input ;
for_each(input.begin(), input.end(),bitodec);
cout << "Decimal equivalent is  " << u << endl;
 system("PAUSE");
}

这是完整的代码

存在逻辑错误。

4

2 回答 2

0

正如文档std::bitset所说:

位集可以通过标准逻辑运算符进行操作,并在字符串和整数之间进行转换

因此,使用std::bitset是实现目标的简单方法。例如:

std::string bit_string = "110010";
std::bitset<8> b3(bit_string);       // [0,0,1,1,0,0,1,0]
std::bitset<8> b4(bit_string, 2);    // [0,0,0,0,0,0,1,0]
std::bitset<8> b5(bit_string, 2, 3); // [0,0,0,0,0,0,0,1]
于 2013-10-27T17:22:24.880 回答
0

我不确定您到底在问什么,因为您没有提出问题。但是,我认为您想知道为什么会出现编译器错误:

prog.cpp:13:48: error: ‘for_each’ was not declared in this scope
  for_each(input.begin(), input.end(),bitodec);

(如果这包含在问题中,那就太好了)

您收到此错误是因为您尝试使用未在程序中声明的 std::for_each。它在“算法”标题中定义,因此要解决此问题,您必须添加

#include <algorithm>

在文件开头的某个地方。

但是,完整代码还有一些其他问题(实际上应该包含在您的问题中),例如:您的全局变量 u 从未被修改,因为您在 bitodec 的 if 块中声明了一个新的临时变量并修改它一。

因此,正如 Joachim Pileborg 在评论中提到的那样,简单地使用 std::stoi 会更容易(而且显然更不容易出错)。

我希望这有帮助 ;-)

于 2013-10-27T15:29:04.617 回答