完成一个字母或数制之间的转化程序,主程序分别具有 5种可选择的子功能,按相应的字符可分别进入相应的子功能并在屏幕上显示结果,按“g” 键退出。子功能分别为: 1) 实现小写字母向大写字母的转换;2)实现大写字母向小写字母的转换;3) 实现二进制数向十六进制数的转换;4) 实现十六进制数向二进制数的转换;5) 实现十六进制数向十进制数的转换。
时间: 2024-02-20 15:02:40 浏览: 67
好的,我理解了你的问题。以下是一个 C++ 的程序,可以实现这些功能:
```cpp
#include <iostream>
#include <iomanip>
#include <cstring>
#include <cmath>
using namespace std;
// 函数声明
void toUpperCase();
void toLowerCase();
void toHex();
void toBinary();
void toDecimal();
int main()
{
char choice;
do {
// 打印菜单
cout << "请选择以下子功能:" << endl;
cout << "1. 小写字母转大写字母" << endl;
cout << "2. 大写字母转小写字母" << endl;
cout << "3. 二进制数转十六进制数" << endl;
cout << "4. 十六进制数转二进制数" << endl;
cout << "5. 十六进制数转十进制数" << endl;
cout << "g. 退出程序" << endl;
cin >> choice;
switch (choice) {
case '1':
toUpperCase();
break;
case '2':
toLowerCase();
break;
case '3':
toHex();
break;
case '4':
toBinary();
break;
case '5':
toDecimal();
break;
case 'g':
cout << "程序已退出!" << endl;
break;
default:
cout << "非法输入,请重新输入!" << endl;
}
} while (choice != 'g');
return 0;
}
// 小写字母转大写字母
void toUpperCase()
{
char c;
cout << "请输入一个小写字母:" << endl;
cin >> c;
if (c >= 'a' && c <= 'z') {
c -= 'a' - 'A';
cout << "转换后的大写字母为:" << c << endl;
} else {
cout << "非法输入!" << endl;
}
}
// 大写字母转小写字母
void toLowerCase()
{
char c;
cout << "请输入一个大写字母:" << endl;
cin >> c;
if (c >= 'A' && c <= 'Z') {
c += 'a' - 'A';
cout << "转换后的小写字母为:" << c << endl;
} else {
cout << "非法输入!" << endl;
}
}
// 二进制数转十六进制数
void toHex()
{
string binary;
cout << "请输入一个二进制数:" << endl;
cin >> binary;
int len = binary.length();
int n = ceil(len / 4.0); // 计算十六进制数的位数
// 补充前导0
while (len < n * 4) {
binary = '0' + binary;
len++;
}
cout << "转换后的十六进制数为:" << endl;
for (int i = 0; i < n; i++) {
int value = 0;
for (int j = 0; j < 4; j++) {
value = value * 2 + binary[i * 4 + j] - '0';
}
cout << hex << uppercase << value;
}
cout << endl;
}
// 十六进制数转二进制数
void toBinary()
{
string hex;
cout << "请输入一个十六进制数:" << endl;
cin >> hex;
cout << "转换后的二进制数为:" << endl;
for (int i = 0; i < hex.length(); i++) {
char c = hex[i];
if (c >= '0' && c <= '9') {
int value = c - '0';
cout << bitset<4>(value).to_string();
} else if (c >= 'A' && c <= 'F') {
int value = c - 'A' + 10;
cout << bitset<4>(value).to_string();
} else if (c >= 'a' && c <= 'f') {
int value = c - 'a' + 10;
cout << bitset<4>(value).to_string();
} else {
cout << "非法输入!" << endl;
return;
}
}
cout << endl;
}
// 十六进制数转十进制数
void toDecimal()
{
string hex;
cout << "请输入一个十六进制数:" << endl;
cin >> hex;
int result = 0;
for (int i = 0; i < hex.length(); i++) {
char c = hex[i];
int value;
if (c >= '0' && c <= '9') {
value = c - '0';
} else if (c >= 'A' && c <= 'F') {
value = c - 'A' + 10;
} else if (c >= 'a' && c <= 'f') {
value = c - 'a' + 10;
} else {
cout << "非法输入!" << endl;
return;
}
result = result * 16 + value;
}
cout << "转换后的十进制数为:" << result << endl;
}
```
这个程序使用了 `switch` 语句来实现子功能的选择。每个子功能都被封装成一个函数,以实现代码的复用和可读性的提高。在每个函数中,我们通过 `cin` 和 `cout` 来读取和输出用户的输入和结果。在转换时,我们使用了一些 C++ 的标准库函数和算法,例如 `toupper` 和 `bitset`。