为什么除非字符串的大小/长度至少为9个字符,否则它不能正确输出内容?我错过了什么吗?
不介意实现,因为我只是在使用这种逻辑输出之后。
const string numRow = "`1234567890-=";
const string firstRow = "QWERTYUIOP[]\\";
const string secondRow = "ASDFGHJKL;'";
const string thirdRow = "ZXCVBNM,./";
int main()
{
while( 1 ) {
string input;
cout << "String: ";
getline( cin, input, '\n');
int len = input.length();
cout << "Length of input: " << len << endl;
char arr[ len ];
// INITIALIZATION
for( int i = 0; i < len; i++ ) {
if( i == len-1 )
arr[i] = '\0';
else
arr[i] = ' ';
}
// CHECK NUMBER ROW OF THE KEYBOARD
for( int i = 0; i < len; i++ ) {
for( int j = 0; j < len; j++ ) {
if( numRow[ j ] != '`' && numRow[ j ] == input[i] ) {
arr[i] = numRow[ j-1 ];
break;
}
else if( numRow[ 0 ] == input[ i ] ) {
arr[i] = numRow[ 0 ];
break;
}
}
}
// SAME CONCEPT FOR THE REST OF THE CODE, CHECK FIRST/SECOND/THIRD
ROW OF THE KEYBOARD AND OUTPUT IT
}
答案 0 :(得分:0)
内部循环的边界(使用j
变量)是错误的。您使用了len
,即输入字符串的长度。因此,您不会检查短输入上的完整numRow数组,并且对长输入具有无效(越界)访问。做这样的事情:
...
int numRowLen = numRow.length();
for (int j = 0; j < numRowLen; j++) {
...