用编程语言C++写一个程序,能够实现不同进制之间的相互转换(二进制、八进制、十进制、十六进制,能够保存历史记录(如十进制a转换为二进制b后,能够通过界面功能调取出a和b),在一次转换结束后可以直接进行下一次转换,也可以重新输入一个数进行新的转换(如 十进制的a转换为二进制的b后,可以立刻用b转换成其他进制或者重新输入一个数d转 换为其他进制),代码在consoleApplication软件中能正常运行
时间: 2023-11-22 18:55:49 浏览: 78
C++实现十六进制字符串转换为十进制整数的方法
以下是一个简单的实现:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// 转换函数
string toBinary(int n) {
string s = "";
while (n > 0) {
s = to_string(n % 2) + s;
n /= 2;
}
return s;
}
string toOctal(int n) {
string s = "";
while (n > 0) {
s = to_string(n % 8) + s;
n /= 8;
}
return s;
}
string toHexadecimal(int n) {
string s = "";
while (n > 0) {
int r = n % 16;
if (r < 10) {
s = to_string(r) + s;
} else {
s = char('A' + r - 10) + s;
}
n /= 16;
}
return s;
}
int toDecimal(string s, int base) {
int n = 0;
for (int i = 0; i < s.length(); i++) {
n *= base;
if (isdigit(s[i])) {
n += s[i] - '0';
} else {
n += s[i] - 'A' + 10;
}
}
return n;
}
// 记录历史记录
struct Record {
int num;
string fromBase;
string toBase;
string result;
};
class Converter {
public:
Converter() {
bases = {"二进制", "八进制", "十进制", "十六进制"};
for (int i = 0; i < bases.size(); i++) {
baseMap[bases[i]] = i;
}
}
void run() {
while (true) {
printMenu();
int choice;
cin >> choice;
if (choice == 0) {
break;
} else if (choice == 1) {
convert();
} else if (choice == 2) {
displayRecords();
}
}
}
private:
vector<string> bases;
map<string, int> baseMap;
vector<Record> records;
void printMenu() {
cout << "请选择操作:" << endl;
cout << "1. 进行转换" << endl;
cout << "2. 查看历史记录" << endl;
cout << "0. 退出" << endl;
}
void convert() {
int num;
string fromBase, toBase;
cout << "请输入要转换的数:";
cin >> num;
cout << "请输入原数的进制:";
cin >> fromBase;
cout << "请输入要转换的进制:";
cin >> toBase;
int n = baseMap[fromBase];
int m = baseMap[toBase];
string result;
if (n == 0) {
result = toBinary(num);
} else if (n == 1) {
result = toOctal(num);
} else if (n == 2) {
result = to_string(num);
} else if (n == 3) {
result = toHexadecimal(num);
}
Record record = {num, fromBase, toBase, result};
records.push_back(record);
cout << num << "(" << fromBase << ")" << "转换为" << result << "(" << toBase << ")" << endl;
cout << "转换成功!" << endl;
}
void displayRecords() {
if (records.empty()) {
cout << "历史记录为空!" << endl;
return;
}
cout << "历史记录:" << endl;
for (int i = 0; i < records.size(); i++) {
Record record = records[i];
cout << record.num << "(" << record.fromBase << ")" << "转换为" << record.result << "(" << record.toBase << ")" << endl;
}
}
};
int main() {
Converter converter;
converter.run();
return 0;
}
```
在这个程序中,我们定义了 `Converter` 类来处理转换和记录历史记录。在 `run()` 方法中,我们使用一个无限循环来等待用户输入操作,当用户选择进行转换时,调用 `convert()` 方法进行转换,并将转换结果添加到历史记录中。当用户选择查看历史记录时,调用 `displayRecords()` 方法显示历史记录。
阅读全文