困惑的字符串和数组的字符

时间:2014-07-17 10:05:38

标签: arrays string char

为什么除非字符串的大小/长度至少为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
}

1 个答案:

答案 0 :(得分:0)

内部循环的边界(使用j变量)是错误的。您使用了len,即输入字符串的长度。因此,您不会检查短输入上的完整numRow数组,并且对长输入具有无效(越界)访问。做这样的事情:

...
int numRowLen = numRow.length();
for (int j = 0; j < numRowLen; j++) {
...