0

このコードの出力を理解するのに苦労しています

#include<iostream>
#include<stdio.h>

using namespace std;

int main() {
    int i = 0;
    int j = 0;
    int k = 0;

    char ch[2][14];
    char re[2][14];

    cout << "\nEnter 1st string \n";
    cin.getline(ch[0], 14);

    cout << "\nEnter the 2nd string\n";
    cin.getline(ch[1], 14);

    for(i = 0; i < 2; i++) {
        int len = strlen(ch[i]);
        for(j = 0, k = len - 1; j < len; j++, k--) {
            re[i][j]=ch[i][k];
        }
    }
    cout << "\nReversed strings are \n";
    cout << re[0];
    cout << endl << re[1] << endl;
    return 0;
}

例えば

 /* 
    Input : 
    hello
    world

    Output :
    olleh<some garbage value>dlrow
    dlrow
  */

非常に基本的なことで申し訳ありませんが、理由がわかりません。前もって感謝します。

4

3 に答える 3

1
for (i = 0; i < 2; i++)
{
    int len = strlen(ch[i]);
    for (j = 0, k = len - 1; j < len; j++, k--)
    {
        re[i][j] = ch[i][k];
    }
    re[i][len] = '\0';
}

逆の文字列を終了する必要があります。

#include <string.h>また、機能のために必要ですstrlen()

于 2014-08-15T12:15:39.680 に答える
1

re[0]re[1]が null で終了していることを確認してください

たとえば、初期化中に行うことができます

for (int i = 0; i < 14; i++)
{
    re[0][i] = '\0';
    re[1][i] = '\0';
}

しかし、それとは別に、中古std::stringなどをお勧めしstd::reverseます。

于 2014-08-15T12:12:18.620 に答える