0

さて、これが私が達成しようとしていることです。

まず、以下の表は私が作成したもののほんの一例です。私の課題では、これらのいずれも知らないと思います。つまり、それらが何を渡すのか、各文字列の長さはわかりません。

私は1つのタスクを達成しようとしていますが、文字列の一部を比較できるようにすることです

   //In Array `phrase`       // in array `word`
   "Backdoor",        0        "mark"         3 (matches "Market")
   "DVD",             1        "of"           2 (matches "Get off")
   "Get off",         2        ""            -1 (no match)
   "Market",          3        "VD"           1 (matches "DVD")

上記のコードからわかるように、左側からは、クラスに格納する配列のセットであり、最大10語です。

これがクラスの定義です。

class data
{
    char phrase[10][40];
public:
    int match(const char word[ ]);
};

そのため、メンバー関数を使用してこのプライベートデータにアクセスしています。

int data::match(const char word[ ])
{
    int n,
    const int wordLength = strlen(word);

    for (n=0 ; n <= 10; n++)
    {
        if (strncmp (phrase[n],word,wordLength) == 0)
        {
            return n;
        }
    }

    return -1;
}

私がそれを機能させようとしている上記のコードは、それが一致する必要があり、一致がn見つからない場合はインデックスを返すことによって一致が見つかった場合は常に戻る必要があるということ-1です。

今起こっていることは常にreturn10です。

4

2 に答える 2

1

あなたはほとんどそこにいますが、あなたのコードは不完全なので、私はいくつかのことで暗闇の中で撃ちます。

インデックスを表す変数が多すぎる可能性があります。nとが異なる場合を除いて、 i1つだけを使用する必要があります。また、よりわかりやすい名前を使用してみてくださいpos。検索しているテキストの長さを表しているようです。

for (n=0 ; n <= searchLength ; n++)

の長さは決して変わらないので、毎回word電話する必要はありません。ループstrlenの前に長さを格納する変数を作成します。for

const int wordLength = strlen(word);    

検索しているテキストはchar配列に格納されていると思います。これは、に格納されている最初の要素へのポインタを渡す必要があることを意味しますn

if (strncmp (&phrase[n],word,wordLength) == 0)

最終的には、次のようなものになります。

char word[256] = "there";
char phrase[256] = "hello there hippie!";

const int wordLength = strlen(word);    
const int searchLength = strlen(phrase);

for (int n = 0; n <= searchLength; n++)
{
    // or phrase + n
    if (strncmp(&phrase[n], word, wordLength) == 0)
    {
        return n;
    }
}

return -1;

注:これで、最後の例は一致を返すところまで完了しました。

于 2012-06-11T00:38:53.940 に答える
0

私はあなたの問題に戸惑っています。不明な場合があります。eaxmpleの場合

abcdefg --- abcde「abcde」と一致しますか?
一致する単語はいくつですか?その他の例、
abcdefg ---dcb「c」に一致しますか?
abcdefg --- aoodeoofoo「a」または「adef」に一致しますか?
最初に一致した単語を見つけたい場合は、OKで非常に簡単です。しかし、最も長く不連続な文字列を見つける場合、それは大きな問題です。LCS問題(最長共通部分列)について調査する必要があると思います

于 2012-06-11T00:50:42.977 に答える