用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
 

__EOF__

本文作者神楽桜KaguraSakura
本文链接https://www.cnblogs.com/KaguraSakura/p/12460657.html
关于博主:hello~好久不见,喜欢的话点个赞吧
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神楽桜KaguraSakura  阅读(21293)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示