C/C++十六进制转化为八进制问题

shellnut6 2019-03-01 08:58:02
自己练习小程序,十六进制转化为八进制,但是输出总是不正确,是怎么回事,自己检测在第45行就输出错误了

附上代码:
#include<iostream>  
#include<string>
using namespace std;

int main()
{
int n, len, len_2, i,j;
string str1, str2 ;
cin >> n;//输入n个十六进制数
while (n--)
{
cin >> str1;
len = str1.length();
str2 = " ";
for (i = 0; i < len; i++)//十六进制转化为二进制
{
switch (str1[i])
{
case'0':str2 += "0000"; break;
case'1':str2 += "0001"; break;
case'2':str2 += "0010"; break;
case'3':str2 += "0011"; break;
case'4':str2 += "0100"; break;
case'5':str2 += "0101"; break;
case'6':str2 += "0110"; break;
case'7':str2 += "0111"; break;
case'8':str2 += "1000"; break;
case'9':str2 += "1001"; break;
case'A':str2 += "1010"; break;
case'B':str2 += "1011"; break;
case'C':str2 += "1100"; break;
case'D':str2 += "1101"; break;
case'F':str2 += "1110"; break;
case'E':str2 += "1111"; break;
}
}
//二进制转化为八进制是需要补位成3的倍数
len_2 = str2.length();
if (len_2 % 3 == 1)
str2 = "00"+str2;
else if (len_2 % 3 == 2)
{
str2 = "0"+str2;
}
cout << str2;//此处输出最左边没有显示补上的0,,只是空出了空格,是怎么回事???
len_2 = str2.length();

//二进制转化成八进制
for (i = 0; i < len_2; i++)
{
cout <<( (str2[i++] - '0') * 4 + (str2[i++] - '0') * 2 + (str2[i] - '0'));
}
cout<<endl;
}


system("pause");
return 0;
}
...全文
221 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shellnut6 2019-03-01
  • 打赏
  • 举报
回复
引用 1 楼 lin5161678 的回复:
空格在14行 然后 cout <<( (str2[i++] - '0') * 4 + (str2[i++] - '0') * 2 + (str2[i] - '0')); 这句代码是错的 未定义行为 不要这样写
感谢感谢,问题已解决。
lin5161678 2019-03-01
  • 打赏
  • 举报
回复
空格在14行

然后
cout <<( (str2[i++] - '0') * 4 + (str2[i++] - '0') * 2 + (str2[i] - '0'));
这句代码是错的
未定义行为
不要这样写

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧