0

私は今日 C++ の学習を開始しましたが、現在いくつかの問題を抱えています。

私は data と呼んだカスタム構造体を持っています:

struct data{
int x, y, l;
};

これは、3 つの変数を持つ単純な構造体です。

次に、この再帰関数を実行します。とはいえ、最終的な return ステートメントを出力すると正しい結果が得られるため、それが何をするかは問題ではありません。

data finds(int x, int y, int length, string s){
    //cout << length << endl;
    int nx = prev(x, s);
    int ny = next(y, s);
    if(nx != -1 && ny != -1 && s.at(nx) == s.at(ny)){
        finds(nx, ny, length + 2, s);
    }
    else{

        cout << x << y << length << endl;
        data vals;
        vals.x = x;
         vals.y = y;
         vals.l = length;
        return vals;
    }
}

この関数の cout ステートメントは、

068

私が欲しい数字です。ただし、この関数の結果を次のように印刷しようとすると:

464078426865241

これは明らかに間違っています。

私の質問は、構造体を適切に返して正しい値を得るにはどうすればよいかということです。

また、おそらく実行可能なコードが必要です。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct data{
    int x, y, l;
};
int next(int i, string s){
    //cout << s;
        //cout << j;
    for(int j = i + 1; j < s.size(); j++){
        if(isalnum(s.at(j))){
            return j;
        }
    }
    return -1;
}

int prev(int i, string s){
    //cout << s;
    for(int j = i - 1; j >= 0; j--){
        //cout << j;
        if(isalnum(s.at(j))){
            return j;
        }
    }
    return -1;
}
data finds(int x, int y, int length, string s){
    //cout << length << endl;
    int nx = prev(x, s);
    int ny = next(y, s);
    if(nx != -1 && ny != -1 && s.at(nx) == s.at(ny)){
        finds(nx, ny, length + 2, s);
    }
    else{

        cout << x << y << length << endl;
        data vals;
        vals.x = x;
         vals.y = y;
         vals.l = length;
        return vals;
    }
}

int main(){
    s = "1233321";
    data val;
    val = finds(3, 3, 2, s);

    cout << val.x << val.y << val.l;





}
4

1 に答える 1

1

再帰を行った関数を返すのを忘れました:

return finds(nx, ny, length + 2, s);
^^^^

そうしないと、未定義の動作が発生します。

于 2013-03-31T00:45:21.137 に答える