0

私はプログラミングが初めてなので、このエラーをグーグルで検索しようとしても、自分のプロジェクトに関連するものや、従うのに十分なほど単純なものは見つかりませんでした。

文字列を繰り返し反転する関数を作成し、次に再帰的に反転する別の関数を作成する必要があります。反復関数は完全に正常に機能します。

string reverse(string str_input) {
    string result = ""; //initialize a blank string to hold reversed string
    for(int i = (str_input.length() - 1); i >= 0; i--) {
            result += str_input.substr(i,1); //concatenates the string backwards
    }

    return result;

しかし、再帰的にしようとすると、無効なポインターエラーが発生しました。テストに使用しているメインと他の関数をここにコピーしました。 string reverse_rec(string str_input, string result, int input_length);

int main() {

    string str_input = "hello";
    int input_length = (str_input.length() - 1);
    string result = "";

    cout<< reverse_rec(str_input, result, input_length) << endl;

    return 0;

}

string reverse_rec(string str_input, string result, int input_length) {
    if(input_length <= 0) {
            return result;
    } else {
            reverse_rec(str_input, result += str_input.substr(input_length,1), --input_length);
    }
}

このエラーの原因についてのヒントはありますか? 私が読んだことによると、ほとんどの人が何かを削除しようとしたときにこのエラーが発生しましたが、このプログラムでは何も削除していないようです...

注: 配列についてはまだ詳しく説明していないため、配列を使用するのではなく、部分文字列を連結してこれを行う必要があります。

4

1 に答える 1

1

返すのを忘れました:

        reverse_rec(str_input, result += str_input.substr(input_length,1), --input_length);
  ^^^^^

このようなエラーは、コンパイラによって簡単に見つけることができます。警告を有効にする必要があります。

于 2013-10-31T02:24:22.590 に答える