C++ 二进制到十进制转换(位置表示法),用于每个循环c++;

C++ 二进制到十进制转换(位置表示法),用于每个循环c++;,c++,string,algorithm,binary,C++,String,Algorithm,Binary,我正在使用位置表示法将二进制转换为十进制,它的不同之处我想还没有人尝试过,我想,在这里,我将用于每个循环 以下是一些步骤: 将二进制存储为字符串 -每次从用于每个循环的字符串中取出一个数字,然后执行操作 int main(void) { string input; cout << "Enter string of binary digits " ; cin >> input ; for_each(input.begin(), input.end()

我正在使用位置表示法将二进制转换为十进制,它的不同之处我想还没有人尝试过,我想,在这里,我将用于每个循环 以下是一些步骤:

  • 将二进制存储为字符串
-每次从用于每个循环的字符串中取出一个数字,然后执行操作

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");
}
int main(无效)
{
字符串输入;
cout>输入;
对于每个(input.begin()、input.end()、bitodec);

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

prog.cpp:13:48: error: ‘for_each’ was not declared in this scope
  for_each(input.begin(), input.end(),bitodec);
(如果问题中包括这一点,那就太好了)

之所以出现此错误,是因为您试图使用std::for_each,而该命令未在程序中声明。它在“algorithm”头中定义,因此要解决此问题,您必须添加

#include <algorithm>
#包括
文件开头的某个地方

然而,完整的代码还存在一些其他问题(这应该包括在您的问题中),例如:您的全局变量u从未被修改,因为您在bitodec的if块中声明了一个新的临时变量,并修改了这个变量

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

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

正如所说:

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

因此,使用
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]
std::字符串位\u string=“110010”;
std::位集b3(位字符串);//[0,0,1,1,0,0,1,0]
std::位集b4(位字符串,2);/[0,0,0,0,0,0,1,0]
std::位集b5(位字符串,2,3);/[0,0,0,0,0,0,1]

有更简单的方法,比如使用。您并没有真正提出问题,但因为我假设您想知道您的编译器错误,std::for_each在中声明,我不确定您在问什么?@P0W是的,取出一个数字并确定它是0还是1,如果是1,则根据位置表示法,位置号将为be基数2的幂,解决后,将它们全部相加,结果将是十进制。我只是在实现我的想法@JoachimPileborg我也要尝试一下,并会让你知道。我正在尝试用不同的方法进行二进制到十进制的转换(只是实现我的想法,我不知道它总是正确或错误的方法),遇到一个逻辑错误,它总是以十进制形式给出0的答案。@user2917063我在答案中提到了原因,您从未使用全局变量u,您的行“int u=pow(2.0,(int)y);”声明了一个新的临时变量,它只存在于if块中;-)如果我在块中声明它,它将显示出来“input digits times”回答错误,每次循环运行时都会初始化。\u。对不起,我不太明白您在尝试什么,可以展示一些代码吗?这比以前更糟,首先,您仍然使用临时u,如果您不想在if块中创建新变量,请编写“u=…”而不是“int u=。。。“。此外,现在您在每次调用bitodec时创建一个新的(未初始化的)变量,因此如果您要在if块中实际使用它,则其内容将是未定义的