⽤C++实现:将16进制转换为10进制
问题描述
从键盘输⼊⼀个不超过8位的正的⼗六进制数字符串,将它转换为正的⼗进制数后输出。
注:⼗六进制数中的10~15分别⽤⼤写的英⽂字母A、B、C、D、E、F表⽰。
1 #include<iostream>
2 #include<cmath>
3 #include<cstring>
4using namespace std;
5int main(void)
6 {
7int n;
8int temp;
字符串长度怎么求9char* arr = new char[9]; //要给‘\0’留⼀位
10 cin >> arr;
11 n = strlen(arr); //计算字符串长度
12long long sum = 0; //⽤long long防⽌结果过⼤
13for (int i = 0; arr[i]!='\0'; i++) //最后⼀位是'\0',不⽤算进去
14 {
15switch (arr[i])
16 {
17case'A': temp = 10; break;
18case'B': temp = 11; break;
19case'C': temp = 12; break;
20case'D': temp = 13; break;
21case'E': temp = 14; break;
22case'F': temp = 15; break;
23default: temp = arr[i] - '0'; break;
24 }
25 sum = sum + temp * pow(16, n - 1- i);
26 }
27 cout << sum;
28return0;
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’};
第⼀种:strlen(char*)函数求的是字符串的实际长度,它求得⽅法是从开始到遇到第⼀个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa⾸地址⼀直下去,直到遇到’\0’停⽌。
第⼆种:sizeof(),求所占总空间的字节数。
参考链接:blog.csdn/qq_41823255/article/details/102318011
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论