编程实现将一个十六进制数转换成与之等价的十进制数。要求在主函数里负责收集字符,并判别它们是否为十六进制字符,另编一函数负责转换工作
时间: 2024-03-26 10:38:25 浏览: 109
好的,我可以帮你解决这个问题。以下是一个简单的 C++ 实现:
```cpp
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int hexToDec(char hex[]) {
int len = strlen(hex);
int base = 1;
int dec = 0;
for (int i = len - 1; i >= 0; i--) {
if (hex[i] >= '0' && hex[i] <= '9') {
dec += (hex[i] - 48) * base;
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
dec += (hex[i] - 55) * base;
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
dec += (hex[i] - 87) * base;
}
base *= 16;
}
return dec;
}
int main() {
char hex[100];
cout << "请输入一个十六进制数:";
cin >> hex;
// 判断输入是否为十六进制数
bool isHex = true;
for (int i = 0; i < strlen(hex); i++) {
if (!((hex[i] >= '0' && hex[i] <= '9') ||
(hex[i] >= 'A' && hex[i] <= 'F') ||
(hex[i] >= 'a' && hex[i] <= 'f'))) {
isHex = false;
break;
}
}
if (isHex) {
int dec = hexToDec(hex);
cout << hex << " 的十进制表示为:" << dec << endl;
} else {
cout << "输入不是十六进制数!" << endl;
}
return 0;
}
```
这个程序中,`hexToDec` 函数用于将一个十六进制数转换成十进制数。这个函数接受一个字符数组作为参数,返回一个整数。这个函数的实现思路是,从右往左遍历字符数组,根据字符的十六进制值和所处的位数计算出它在十进制下的值,最终累加得到该十六进制数的十进制值。
在 `main` 函数中,首先读入一个字符数组作为输入的十六进制数。然后,通过遍历字符数组判断输入是否为十六进制数。如果是,调用 `hexToDec` 函数计算出它的十进制值并输出;否则,输出错误信息。
注意,这个程序并没有做输入长度的检查,如果输入的十六进制数过长可能导致数组溢出等问题。在实际开发中,需要对输入长度进行限制和检查。
阅读全文