我用C ++编写程序。我的程序将二进制转换为十进制,十进制转换为字母。输入用斜杠“/”分隔
输入示例:
输入:00001/00010/00011
输出:abc
这是我的代码
#include <iostream>
#include <conio.h>
#include <cstring>
using namespace std;
int main()
{
char X[64];
int T,d=0,i=0,j;
scanf("%[^/]/%d", X);
while(X[i]!=0)
{ if(X[i]=='0'||X[i]=='1')
{
d=d*2+X[i]-48;
}i++;
}
switch (d)
{
case 1:
cout<<"a";
break;
case 2:
cout<<"b";
break;
case 3:
cout<<"c";
break;
case 4:
cout<<"d";
break;
case 5:
cout<<"e";
break;
case 6:
cout<<"f";
break;
case 7:
cout<<"g";
break;
case 8:
cout<<"h";
break;
case 9:
cout<<"i";
break;
case 10:
cout<<"j";
break;
case 11:
cout<<"k";
break;
case 12:
cout<<"l";
break;
case 13:
cout<<"m";
break;
case 14:
cout<<"n";
break;
case 15:
cout<<"o";
break;
case 16:
cout<<"p";
break;
case 17:
cout<<"q";
break;
case 18:
cout<<"r";
break;
case 19:
cout<<"s";
break;
case 20:
cout<<"t";
break;
case 21:
cout<<"u";
break;
case 22:
cout<<"v";
break;
case 23:
cout<<"w";
break;
case 24:
cout<<"x";
break;
case 25:
cout<<"y";
break;
case 26:
cout<<"z";
break;
}
cout << endl;
}
我已经使用了许多仍然无法使用的方法,只能读取前面的二进制文件。对不起,我的英语不好
您需要解决两个直接问题:
scanf("%[^/]/%d", X);
如上所述,这将显示未定义的行为,因为它将尝试将第一个字符串解析为X
,然后它读取分隔的'/'
,但之后它将读取下一组数字作为数字而没有变量来存储它们in。我建议摆脱格式说明符字符串中的尾随%d
。
您还应该检查scanf()
的返回值,因为这将告诉您解析了多少个值。了解这一点可以非常巧妙地解决主要问题:为什么只处理第一个数字?
那是因为你调用scanf()
一次,读取数字,处理它,输出结果,然后终止执行。
你需要做的是在while
循环中包含大部分代码,并使用以下行作为循环的测试条件:
while (scanf("%[^/]/", X) == 1)
用一块石头杀死两只鸟:它会正确地解析下一组数字并在它找到任何东西时进入循环,如果没有,它应该返回0,导致循环终止。
#include <iostream>
#include <string>
#include <sstream>
template< typename T, std::size_t N >
std::size_t sizeof_array(T (&)[N]) { return N; }
int main()
{
std::string str;
std::getline(std::cin, str);
int number[3]{};
std::size_t pos;
auto start = str.data();
for (std::size_t i{}; i < sizeof_array(number); ++i) {
number[i] = std::stoi(start, &pos, 2);
start += pos + 1;
}
for (auto n : number)
std::cout << static_cast<char>('A' + n - 1);
std::cout.put('\n');
}