0

方向を保存する整数の 1 次元配列に基づいて、単語「OIE」(出現回数を示す) を検索する単語検索を開発しようとしています (8)が、これを実行すると奇妙なエラーが発生します (および誤った出力が表示されます)。 )。

これはコードです:

    int arrf[8] = {0, -1, -1, -1, 0, 1, 1, 1};
int arrc[8] = {-1, -1, 0, 1, 1, 1, 0,-1};
char s[] = "OIE";

int main() {
    int n, m;
    while (cin >> n >> m) {
        int res = 0;
        vector<vector<char> > S(n, vector<char>(m));
        for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) cin >> S[i][j];
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                for (int d = 0; d < 8; ++d) {
                    bool trobat = true;
                    for (int h = 0; h < 3 and trobat; ++h) {
                        int f = i + arrf[d], c = j + arrc[d];
                        if (f < 0 || f >= n || c < 0 || c >= m || S[f][c] != s[h])
                            trobat = false;
                    }
                    if (trobat) res++;
                }
            }
        }
        cout << res << endl;
    }
}

誰かがこれを修正するのを手伝ってくれますか? 感謝します。

よろしく。

4

1 に答える 1

0

1つのエラーは、この行です

int f = i + arrf[d], c = j + arrc[d];

する必要があります

int f = i + h*arrf[d], c = j + h*arrc[d];

あなたのコードでは、同じ位置をチェックしている内側のループを何回回っても問題ありません。

于 2013-08-26T21:31:45.513 に答える