把一串数字换成对应的字母
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。
位编码有五种: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。