2

重複の可能性:
2 次元配列を渡す

コードに質問があります。誰でも私を助けることができますか?

void print(char S[], char * * path, int i, int j) {
    if (i == 0 || j == 0) return;
    if (path[i][j] == 'c') {
        print(S, path, i - 1, j - 1);
        cout << S[i];
    }
    else if (path[i][j] == 'u') print(S, path, i - 1, j);
    else print(S, path, i, j - 1);
}
int LongestCommonSubsequence(char S[], char T[]) {
    int Slength = strlen(S);
    int Tlength = strlen(T); /* Starting the index from 1 for our convinience (avoids handling special cases for negative indices) */
    int i, j;
    char path[Slength][Tlength];
    int common[Slength][Tlength];
    for (i = 0; i <= Tlength; i++) {
        common[0][i] = 0;
    } /*common[i][0]=0, for all i because there are no characters from string T*/
    for (i = 0; i <= Slength; i++) {
        common[i][0] = 0;
    }
    for (i = 1; i <= Slength; i++) {
        for (j = 1; j <= Tlength; j++) {
            if (S[i] == T[j]) {
                common[i][j] = common[i - 1][j - 1] + 1;
                path[i][j] = 'c';
            }
            else if (common[i - 1][j] >= common[i][j - 1]) {
                common[i][j] = common[i - 1][j];
                path[i][j] = 'u';
            }
            else {
                common[i][j] = common[i][j - 1];
                path[i][j] = 'l';
            }

        }
    }
    print(S, path, Slength, Tlength); // it gives an Error!!!!
    return common[Slength][Tlength];

}

私のエラーは次のとおりです。

print(S,path,Slength,Tlength);

そしてそれは与えます:

引数 `2' の ``char ( )[((unsigned int)((int)Tlength))] ' to \``char**' を ``void print(char , char**, int, int)'` に変換できません

私は何をすべきか?

4

2 に答える 2

2

これがあなたの問題です:

char path[Slength][Tlength];
int common[Slength][Tlength];

(ここでSlength、およびTlengthは非定数式です)

可変長配列は不正です。C++ 標準では、宣言内の配列境界に定数整数式new[]が必要です (式では、最も外側の境界を変数にすることができます)。

有権者への注意: OP は彼の質問を C++ としてマークしました。他の誰かがタグを変更しました。実際に使用されているコンパイラはわかりません。

于 2012-10-29T18:41:55.787 に答える
0

すでに述べたコメント投稿者のchar [][]には( 、、char[]または、...もそうですが) 、関数に渡されるとchar [][][]減衰します。char *

したがって、コードの問題を実際に解決するには、変更するだけです

void print(char S[], char * * path, int i, int j) 

することが

void print(char S[], char * path, int i, int j) 
于 2012-10-30T10:03:15.673 に答える