C++定义一个栈类,通过调用类中定义的入栈和出栈函数实现从键盘输入一个十进制的正整数再输入转换的进制,输出对应的二至九进制数
时间: 2024-10-24 11:06:05 浏览: 14
Java定义栈结构,并实现入栈、出栈操作完整示例
在C++中,你可以定义一个简单的栈类(Stack),通常会使用`std::stack`容器作为底层数据结构,但是如果你想自定义实现,可以创建一个数组并维护栈顶指针。下面是一个基础的栈类定义以及相应的入栈(push)和出栈(pop)操作的例子:
```cpp
#include <iostream>
#include <vector>
class CustomStack {
private:
std::vector<int> stackData;
int top;
public:
// 定义构造函数和初始化
CustomStack() : top(-1) {}
// 入栈操作 - push
void push(int value) {
if (top < stackData.size()) {
stackData[++top] = value;
} else {
std::cout << "Stack overflow!" << std::endl;
}
}
// 出栈操作 - pop
int pop() {
if (top >= 0) {
return stackData[top--];
} else {
std::cout << "Stack underflow!" << std::endl;
return -1; // 返回默认值或错误码
}
}
// 转换进制并返回结果
int toBase(int base, bool isDecimal = true) const {
if (isDecimal) {
// 将十进制转其他进制的逻辑在这里实现,假设暂时只支持2-9进制
if (base < 2 || base > 9) {
throw std::invalid_argument("Invalid base. Base must be between 2 and 9.");
}
// 示例代码,真实情况下需要更复杂算法如循环处理每一位
return static_cast<int>(value % base) + base * toBase(value / base, false);
} else {
std::cerr << "Conversion from non-decimal bases not supported yet." << std::endl;
return -1; // 或者抛异常
}
}
};
int main() {
CustomStack s;
int decimalInput;
std::cout << "Enter a positive integer in decimal: ";
std::cin >> decimalInput;
// 入栈
s.push(decimalInput);
// 确定目标进制范围
int targetBase;
std::cout << "Enter the target base (2-9): ";
std::cin >> targetBase;
try {
// 转换并输出
int result = s.toBase(targetBase);
if (result != -1) {
std::cout << "The number in " << targetBase << " base is: " << result << std::endl;
}
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个例子中,用户会被提示输入一个十进制数,并选择目标进制(2到9)。然后,程序将数字入栈并尝试转换为所选的进制。
注意:这个例子只是一个简化版本,实际应用中你需要完善十进制转其他进制的算法,并处理可能出现的边界条件和异常情况。
阅读全文