簡體   English   中英

C ++:十六進制到十進制轉換功能-無法獲得正確的輸出

[英]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並忽略60 ,則結果為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM