[英]C++: Hex to Decimal Conversion Function - Not getting correct output
我正在尝试将十六进制值转换为十进制。 我只是想提取一个数字(0-9)或一个字母(AF),然后使用另一个函数将其转换为数字值,然后将这些值压入堆栈中(我本可以使用矢量,但是这次选择堆栈)。 然后,我只是想获取十进制值,并且由于堆栈向后工作,因此应该井井有条。
如下所示,正确的输出应为1728,但我得到的是12。
提前致谢。
#include <iostream>
#include <string>
#include <math.h>
#include <stack>
using namespace std;
int hexCharToDec(char a);
void hexToDecimal(string str, stack<int> & myStack);
int main(){
stack<int> myStack;
string str = "6C0"; // should be 1728
hexToDecimal(str, myStack);
}
void hexToDecimal(string str, stack<int> & myStack){
int totalVal = 0;
for (int i = 0; i < str.length(); i++){
if (str.at(i) <= 9)
myStack.push(str.at(i));
else if (str.at(i) >= 'A' && str.at(i) <= 'F')
myStack.push(hexCharToDec(str.at(i)));
}
int k = 0;
for (int i = 0; i < myStack.size(); i++){
totalVal += (myStack.top() * pow(16, k++));
myStack.pop();
}
cout << totalVal;
}
int hexCharToDec(char hexChar){
switch(hexChar){
case 'A':
return 10;
break;
case 'B':
return 11;
break;
case 'C':
return 12;
break;
case 'D':
return 13;
break;
case 'E':
return 14;
break;
case 'F':
return 15;
break;
}}
在您发布的代码的原始版本中,您将0
和'0'
混合在一起,其他数字也一样。 输出为12
因为如果采用6C0
并忽略6
和0
,则结果为C
,即12
。
在更新的版本中,此循环中断:
for (int i = 0; i < myStack.size(); i++)
{
totalVal += (myStack.top() * pow(16, i));
myStack.pop();
}
当您执行pop()
,它将减小size()
。 因此,您实际上只处理堆栈中一半的数字(四舍五入)。 要解决此问题,请循环直到myStack.size() == 0
为止。
问题在于您输入的字符不在if
语句的范围内。 数字字符没有值0
- 9
,他们是'0'
- '9'
完全不同的事情- 。 这些字符根本不会得到处理。
另外,您的for
循环遍历了堆栈的大小-但是,随着您将内容从终端弹出,堆栈的大小正在改变。 您只处理一半的输入。
一个可行的解决方案:
#include<iostream>
#include <string>
#include <sstream>
int main()
{
int n;
string str = "6C0";
istringstream sin(str);
sin>>hex>>n;
cout<<n<<endl;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.