把一串数字换成对应的字母

Change a bunch of numbers into corresponding alphabets

位编码有五种:11、10、01、001,000.The每种位编码对应的消息是

11 -> A

10 -> B

01 -> C

001 -> D

000 -> E

编译结果如下:

Enter a sequence of bits: 01100001100110
CBEADB

我已经写了这个但是它不能工作。

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int A, B, C, D, E ;
    string code;
    cout << "Enter a sequence of bits: ";
    cin >> code;
    int i = 0;
    while (i < code.length())
    {
        if( code[i]== 1 && code[i + 1]== 1 )
        {
            cout << 'A';
            i += 2;
        }
        else if ( code[i]== 1 && code[i + 1]== 0)
        {
            cout << 'B';
            i += 2;
        }
        else if ( code[i]== 0 && code[i + 1]== 1)
        {
            cout << 'C';
            i += 2;
        }
        else if ( code[i]== 0 && code[i + 1]== 0 && code[ i + 2]== 1)
        {
            cout << 'D';
            i += 3;
        }
        else if ( code[i]== 0 && code[i + 1]== 0 && code[ i + 2]== 0)
        {
            cout << 'E';
            i += 3;
        }
    }
    cout << endl;
    return 0;
}

你的代码是正确的,你只需要使用字符文字而不是 int 文字,例如:

if (code[i] == '1' && code[i + 1] == '1')

字符串中的数字具有与其整数值不匹配的代码。 '0' 不是 0。因此,您必须使用 '0''1'.

您输入的是字符串而不是数字,因此您必须检查字符。您应该使用 == '0' 之类的东西,而不是使用 == 0 之类的东西。此外,您可能希望确保输入具有正确的格式并且您不会 运行 进入无限循环(通过 运行 永远 while 而不更新 i) 或缓冲区溢出(又名索引超出范围,通过检查 code[i]i >= code.length())。你可以这样做:

#include<iostream>
#include<string>
using namespace std;

int main()
{
    int A, B, C, D, E ;
    string code;
    cout << "Enter a sequence of bits: ";
    cin >> code;
    int i = 0;
    while (i+1 < code.length())
    {
        if( code[i]== '1' && code[i + 1]== '1' )
        {
            cout << 'A';
            i += 2;
        }
        else if ( code[i]== '1' && code[i + 1]== '0')
        {
            cout << 'B';
            i += 2;
        }
        else if ( code[i]== '0' && code[i + 1]== '1')
        {
            cout << 'C';
            i += 2;
        }
        else if (i+2 < code.length()) 
        {
            if (code[i]== '0' && code[i + 1]== '0' && code[ i + 2]== '1')
            {
                cout << 'D';
                i += 3;
                }
                else if ( code[i]== '0' && code[i + 1]== '0' && code[ i + 2]== '0')
                {
                    cout << 'E';
                    i += 3;
                } 
                else 
                {
                    return 1;
                }
        }
        else 
        {
            return 1;
        }
    }
    if (i < code.length()) {
        return 1;
    }
    cout << endl;
    return 0;
}

你可以试试here