問題描述
從鍵盤輸入一個不超過8位的正的十六進制數字符串,將它轉換為正的十進制數后輸出。
注:十六進制數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示。
注:十六進制數中的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()就是從鍵盤獲取字符,直到回車為止。
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(),求所占總空間的字節數。
第二種:sizeof(),求所占總空間的字節數。
參考鏈接:https://blog.csdn.net/qq_41823255/article/details/102318011