【问题标题】:Binary to decimal conversion(positional notation method) using for_each loop c++使用for_each循环c ++进行二进制到十进制转换(位置表示法)
【发布时间】:2013-11-06 07:47:06
【问题描述】:

我正在使用位置符号方法将二进制转换为十进制及其不同,我猜没有人尝试过,但我猜,在这个我使用 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");
}

here is full code

存在逻辑错误。

【问题讨论】:

  • 还有更简单的方法,比如使用std::stoi
  • 您并没有真正提出问题,但由于我认为您想了解您的编译器错误,因此在 中声明了 std::for_each
  • 我不知道你在问什么?
  • @P0W 是的,取出一个数字并确定它是0还是1,如果它是一个则根据位置符号方法,位置编号将是基数2的幂,解决后将它们全部添加即可结果为小数
  • 我只是在实现我的想法@JoachimPileborg 我也会试试这个,然后告诉你。

标签: c++ string algorithm binary


【解决方案1】:

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

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 在 cmets 中提到的那样,简单地使用 std::stoi 会更容易(而且显然更不容易出错)。

我希望这会有所帮助;-)

【讨论】:

  • 我正在尝试用不同的方法进行二进制到十进制的转换(只是实现我的想法,我不知道它总是正确或错误的方法),并遇到逻辑错误,它总是给出 0 作为答案十进制。
  • @user2917063 我在答案中提到了这样做的原因,您从不使用全局变量 u,您的行“int u = pow(2.0, (int)y);”声明一个新的、临时的,它只存在于 if 块中;-)
  • 如果我在块内声明它,它将显示“输入数字次”错误答案,并在每次 for_each 循环运行时初始化。
  • 对不起,我不太明白你在尝试什么,你能显示一些代码吗?
  • 比以前差了一点,首先还是用临时的u,如果不想在if块内新建变量,写"u=..."而不是"诠释你=...”。此外,现在您在每次调用 bitodec 时创建一个新的(未初始化的)变量,因此如果您要在 if 块中实际使用它,它的内容将是未定义的
【解决方案2】:

正如the documentation of 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]

【讨论】:

    猜你喜欢
    • 2021-12-10
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 2015-03-19
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多