我正在尝试使用堆栈将十进制数转换为二进制数,我必须使用结构。
现在从我对结构的理解,我们可以在其中包含成员函数。堆栈遵循LIFO策略。
我们可以通过创建一个struct来创建一个堆栈,声明一些成员,并有一些函数来初始化和处理这些成员。
所以,我尝试用上面提到的东西和我的理解来声明一个结构,但我似乎仍然没有把这个概念弄好。我相信这是我的错误。但阅读论坛仍然没有帮助,因为我们还没有上过课程,而且每个论坛,结构和课程都是混杂的。
到目前为止,这是我的代码,我们非常感谢有关概念和逻辑的任何帮助和指导。
#include<iostream>
using namespace std;
struct bin{
int num[15];
int ci;
void init()
{
ci = 0;
for (int i = 0;i < 15;i++)
num[i] = -1;
}
void push(int n)
{
num[ci] = n;
ci++;
}
int pop()
{
int temp = num[--ci];
num[ci] = -1;
return temp;
}
};
int main()
{
int inp, count = 0;
bin var;
cout << "Enter a decimal number to convert into binary: ";
cin >> inp;
while (inp != 0)
{
int rem = inp % 2;
cout << "rem= " << rem << endl;
inp /= 2;
cout << "inp= " << inp << endl;
var.push(rem);
count++;
}
cout << "\nYour binary is: ";
while (count != 0)
{
cout << var.pop();
count--;
}
return 0;
}
我尽力找到错误但不能。所以,最后我简单地使用了数组并实现了如下代码
#include<iostream>
using namespace std;
void push(int bin[], int n, int &ci);
void init(int bin[], int &count, int &ci);
int pop(int bin[], int &ci);
void display(int bin[], int &count, int &ci);
void findBinary(int bin[], int &count, int&ci, int &inp);
int main()
{
int inp, count, ci;
int bin[20];
char c = '\0';
init(bin,count,ci);
cout << "Enter a decimal number to convert into binary: ";
cin >> inp;
findBinary(bin, count, ci, inp);
display(bin, count, ci);
return 0;
}
void init(int bin[], int &count, int &ci)
{
count = 0;
ci = 0;
for (int i = 0;i < 20;i++)
bin[i] = -1;
}
int pop(int bin[], int &ci)
{
int temp = bin[--ci];
return temp;
}
void push(int bin[], int n, int &ci)
{
bin[ci] = n;
ci++;
}
void display(int bin[], int &count, int &ci)
{
cout << "\nYour binary is: ";
while (count != 0)
{
cout << pop(bin, ci);
count--;
}
cout << endl;
}
void findBinary(int bin[], int &count, int&ci, int &inp)
{
while (inp != 0)
{
int rem = inp % 2;
inp /= 2;
push(bin, rem, ci);
count++;
}
}
所以我的问题是: 1.当我们在结构中编写函数时,在创建结构类型对象时该函数是否运行? 2.我在第一个例子中使用struct实现堆栈的方法是否正确?
答案 0 :(得分:0)
当您首次从<Root>
<Rows>
<Row>
<F1>1A</F1>
<F2>1B</F2>
<F3>1C</F3>
</Row>
<Row>
<F1>2A</F1>
<F2>2B</F2>
<F3>2C</F3>
</Row>
<Row>
<F1>3A</F1>
<F2>3B</F2>
<F3>3C</F3>
</Row>
</Rows>
</Root>
或struct
创建对象时,constructor会运行 - 但没有其他功能(因此不是您的class
功能)。如果您希望它运行,您需要明确地调用它:
init
就您的函数的实现而言:您应该使用边界检查来确保您不会推送超出您可以处理的项目,或者弹出超过队列中的项目。除此之外,我看不出他们有多大的不妥。考虑使用bin var;
var.init();
而不是数组,但是当您刚刚开始学习C ++时,您可能会在课程的后期进行介绍。
当您将构造函数添加到std::vector
时,您也可以切换到使用struct
。在C ++中,结构和类是等价的(使用结构中的默认访问修饰符为class
的次要调整,而在类中它是public
),所以不要让它让你失望。