用C++實現:將16進制轉換為10進制


問題描述
  從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
  注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
 1 #include<iostream>
 2 #include<cmath>
 3 #include<cstring>
 4 using namespace std;
 5 int main(void)
 6 {
 7     int n;
 8     int temp;
 9     char* arr = new char[9];       //要給‘\0’留一位
10     cin >> arr;
11     n = strlen(arr);               //計算字符串長度
12     long long sum = 0;             //用long long防止結果過大
13     for (int i = 0; arr[i]!='\0'; i++)         //最后一位是'\0',不用算進去
14     {
15         switch (arr[i])
16         {
17         case 'A': temp = 10; break;
18         case 'B': temp = 11; break;
19         case 'C': temp = 12; break;
20         case 'D': temp = 13; break;
21         case 'E': temp = 14; break;
22         case 'F': temp = 15; break;
23         default: temp = arr[i] - '0'; break;
24         }
25         sum = sum + temp * pow(16, n - 1- i);
26     }
27     cout << sum;
28     return 0;
29 }

注意問題:(1)題目要求不超過8位,也就是說最大可為8位,但是還要考慮字符串數組最后一位必須是'\0',所以創建數組的時候是char[9]而不是char[8]

                  (2)最后10進制結果用long long而不用int是為了防止結果過大溢出無法表示

                  (3)關於字符串計數的問題:strlen函數求出的字符串長度是有效長度,是不包含末尾的'\0'的,所以在最后求sum的值的時候,用n-1-i而不是減2

補充:

1.strlen()函數求出的字符串長度為有效長度,既不包含字符串末尾結束符 ‘\0’;
2.sizeof()操作符求出的長度包含字符串末尾的結束符 ‘\0’;
3.length()函數求出的字符串長度不包含字符串末尾結束符’\0’;
4.當在函數內部使用sizeof()求解由函數的形參傳入的字符數組的長度時,得到的結果為指針的長度,既對應變量的字節數,而不是字符串的長度,此處一定要小心。
5.C/C++的strlen(str)和str.length()和str.size()都可以求字符串長度。其中str.length()和str.size()是用於求string類對象的成員函數,strlen(str)是用於求字符數組的長度,其參數是char*。
6.這三種函數strlen、length、size函數計算的字符串長度都不算最后的操作符’\0’。
7.strlen函數用之前需要先對字符數組定義,例如char str[]={“hello world”};或者char str[]={‘h’,‘e’,‘l’,‘l’,‘o’,’ ‘,‘w’,‘o’,‘r’,‘l’,‘d’,’\0’};
8.getchar()就是從鍵盤獲取字符,直到回車為止。
第一種:strlen(char*)函數求的是字符串的實際長度,它求得方法是從開始到遇到第一個’\0’,如果你只定義沒有給它賦初值,這個結果是不定的,它會從aa首地址一直找下去,直到遇到’\0’停止。
第二種:sizeof(),求所占總空間的字節數。
參考鏈接:https://blog.csdn.net/qq_41823255/article/details/102318011
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM