【用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

猜你喜欢

转载自blog.csdn.net/weixin_42483745/article/details/127043066