位編碼有五種:11、10、01、001、000。每種位編碼對應的報文是
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;
}
uj5u.com熱心網友回復:
您的輸入是字串而不是數字,因此您必須檢查字符。而不是使用類似的東西== 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;
}
你可以在這里試一試。
uj5u.com熱心網友回復:
您的代碼是正確的,您只需要使用字符文字而不是 int 文字,例如:
if (code[i] == '1' && code[i 1] == '1')
字串中的數字具有與其整數值不匹配的代碼。'0'不是0。因此,您必須使用'0'和'1'。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/368304.html
