使用char X获取输入X / X / etc并用斜杠/分隔它

问题描述 投票:0回答:2

我用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;
}

我已经使用了许多仍然无法使用的方法,只能读取前面的二进制文件。对不起,我的英语不好

c++ c++11
2个回答
0
投票

您需要解决两个直接问题:

scanf("%[^/]/%d", X);

如上所述,这将显示未定义的行为,因为它将尝试将第一个字符串解析为X,然后它读取分隔的'/',但之后它将读取下一组数字作为数字而没有变量来存储它们in。我建议摆脱格式说明符字符串中的尾随%d

您还应该检查scanf()的返回值,因为这将告诉您解析了多少个值。了解这一点可以非常巧妙地解决主要问题:为什么只处理第一个数字?

那是因为你调用scanf()一次,读取数字,处理它,输出结果,然后终止执行。

你需要做的是在while循环中包含大部分代码,并使用以下行作为循环的测试条件:

while (scanf("%[^/]/", X) == 1)

用一块石头杀死两只鸟:它会正确地解析下一组数字并在它找到任何东西时进入循环,如果没有,它应该返回0,导致循环终止。


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');
}
© www.soinside.com 2019 - 2024. All rights reserved.