0

これはグループ課題であり、私たちの教授がプロジェクトを 1 週間延長するほど難しくなっています。50 のステージ/テストがあり、ステージ 11 までしか到達できず、関数は失敗します。

この関数は .cpp ファイルにあります (関数の一部を変更すると、通過したステージ 11 に影響するため、この関数が問題を引き起こしていると確信しています)。

int segment::match(const char word[]) {
    int i;
    cout << data[0];
    data[0] == "OOP";
    cout << data[0];
    for(i=0;i<NUM_MAX;i++) {
        cout << "word = " << &word[i] << " data[i] = " << data[i];
        if(strstr(&word[i],data[i])!= NULL)
        break;
    }
       return i==NUM_MAX ? 1 : i-1;

main.cpp (割り当てとして提供されます) から、これが達成しようとしているものです。

テスト11に合格...

Your match( ) return value ----> -1
Actual match( ) return value --> -1 
Press the ENTER key to continue... 
word = OOP data[i] = 

Failed while testing the match( ) 
function... Failed on test 12... 
Your match( ) return value ----> -1 
Actual match( ) return value --> 1 
Press the ENTER key to continue...

You passed 11/50 tests... 
Your program is 22.00% complete! 
Your program still needs some work! 
Keep at it!

この関数は、"oop" をチェックし、存在しない場合は -1 で終了し、存在する場合は 1 で true を返す必要があります。

私が求めているのは、-1 と 1 の両方を適切な順序で返す関数をどのように作成するかということだと思います。

main.cpp と segement.cpp にアクセスしたい場合は、ファイルとしてどこかにアップロードできます。これらは非常に長く、投稿を詰め込みたくなかったからです。

どんな助けでも大歓迎です、ありがとう。

編集* これが私たちが持っている完全なコードです http://jsfiddle.net/h5aKN/

「html」セクションには、私たちが構築したものであるsegement.cppがあります。jscript セクションには、教授が作成した a2main.cpp があります。

4

2 に答える 2

1

data[0] == "OOP";おそらくあなたがやりたいことではありません。double =( ==) は等しいかどうかをテストするため、ここではdata( data[0]) の最初のインデックスの項目と文字列"OOP"が等しいかどうかをテストしています。

テストの実行では、 cout'ing: を実行しています。これは、おそらく正しく定義されword = OOP data[i] =ていることを意味しますが、そうではありません。これは、上記の同等性テストの使用法に戻ります。 word[i]data[i]

初期化dataを正しく設定した場合(メモリを正しく割り当てることを意味します。dataインスタンス化された場所がわかりません)、呼び出しからNULL以外のポインターを取得するため、テストは-1を返す可能性があります(それが正しいとstrstr()仮定します) datatype)、on ing にiなり、三項演算子は yield , = になります。0breaki-1-1

data変数の初期化/割り当てを修正します

また、C スタイルの文字列 (char 配列) に限定されていない場合は、std::string 型とそれに関連するメソッドを使用します (まだ使用していない場合は、c++ 文字列リファレンスを参照してください)。通常、一緒に作業する方がはるかに優れています

于 2012-06-16T18:22:14.807 に答える
0

単語のリストを関数に渡す場合:

( strstr(&word[i],data[i])) を使用すると、別の文字列内の文字列を探していることがわかります。したがって、文字列 (単語) のリストをループしています。

次に、これは間違っているように見えます:

int segment::match(const char word[]) {

ここで、1 つの単語を渡します。
それがどうあるべきかを伝えることは不可能ですが、推測では次のようになります。

int segment::match(const char* word[]) {
                   //      ^^^^^

しかし、正直に言うと、全体がかなり醜い C++ です。もしあなたが CI を書いていれば問題ないと言うでしょうが、C++ を正しく書いていれば、型システムはこれらすべての問題からあなたを救ってくれたでしょう。std::string を使用して単語を表します。

于 2012-06-16T18:22:54.153 に答える