2

こんにちは、これは Morris-Pratt アルゴリズムを実装しようとしている私のコードの一部です。変数が一致しないことがわかった場合に変数を比較しているとき、これは、変数の 1 つ「Temp」が配列の末尾に追加された余分な文字を取得しているためです。これが私のコードです...

        // Calculate the next talbe
        char test[searchLen];

        for(int i = 0; i < searchLen; i++)
        {   
            test[i] = fileContent[currPos+i];
        }

        cout << "SEARCHLEN: " << searchLen << endl;
        cout << "TEST: " << '\t' << '\t' << test << endl;
        cout << "SEARCH: " << '\t' << search << endl;
        cout << strcmp(test,search) << endl << endl;
        // Determine if a match is detected

        if(strcmp(test,search)==0)
        {
            cout << "----------------------> Match detected at: " << currPos << endl;
        }

        currPos ++;
    }

    return numberOfComparisons;
}

出力は次のようになります...

SEARCHLEN: 8
TEST:       athsoutg5?h
SEARCH:     brilling
-1

ご覧のとおり、5?H はそこにあるはずがなく、私のコードを壊しています。

4

2 に答える 2

6

null ターミネータを追加する必要があります。

   char test[searchLen + 1];
   test[searchLen] = '\0';
于 2012-05-24T14:53:22.837 に答える
1

文字列が \0 で終わっていないように見えますが、コピーするのを忘れたり、そこに入れたりするのを忘れていませんか?

于 2012-05-24T14:54:25.520 に答える