0

以前の文字列で上書きして配列内の文字列を削除することになっている削除関数があります。look 関数は、Overide が一致し、削除する必要があることを確認します。しかし、Delete のループ用に書いたコードは、Overide が占めている配列の最初の場所を削除していないため、出力は変更されません。また、+ の後の各フレーズが配列に追加されるため、配列内で 4 つのスポットが使用されます。申し訳ありませんが、その部分の見栄えを良くすることができず、書式設定が台無しになりました。

int AR::Look(const std::string & word)
{
    int result = -1;
    for(int i=0; i<counter; ++i)
    {
        if( con[i].find(word) != std::string::npos)
            result = i;
    }
    return result;
}

void AR::Delete(const string & word)
{
    int loc = Look(word);

    if (loc == -1)
    {
         cout<<"word not found\n";
    }
    else
    {
         for(int i=0; i<counter-1,i++;)
         {
             con[i]= con[i+1];
         }
    }
}    



AR their

    Ar(1);
        theirAr + "Overload the +" + " operator as a member function " + "with chaining to add a string " + "to an Arrary object.";

        cout<<theirAr<<endl<<endl;


        cout<<"testing Delete and Look.  <<endl;

        theirAr.Delete("XXXXXX");
        theirAr.Delete("Overload");
        cout<<"Output after Delete and Look called\n";
        cout<<theirArray<<endl<<endl;
4

3 に答える 3

0

文字列を見つけていますが、表示されない場合にのみ値を使用してエラーを書き込みます。位置 N に文字列が見つかった場合は、とにかく最初の文字列を削除します。

void AR::Delete(const string & word)
{
    int loc = Look(word);

    if (loc == -1)
    {
        cout<<"word not found\n";
    }
    else
    {
        for(int i=0;i<counter-1,i++;)  <--- Why don't you use loc here???
        {
            con[i]= con[i+1];
        }
    }
}

また、あなたのLookメソッドは、最初の一致の後に返すほうがよいでしょう:

for ... {
 if( con[i].find(word) != std::string::npos)
     return i;
}
return -1;
于 2013-09-18T21:22:51.720 に答える
0

これがあなたの問題かどうかはわかりませんが、そうすべきではありませんか?

void AR::Delete(const string & word)
{
    int loc = Look(word);

    if (loc == -1)
    {
         cout<<"word not found\n";
    }
    else
    {
        for(int i=loc;i<counter-1,i++;)  // changes in this line
        {
           con[i]= con[i+1];
        }
    }
}    

文字列を見つけたところから始めて、それらを後方にシャッフルし始めます。また、配列を短縮するものは何ですか? つまり、最後の要素を削除します。それも欠けているようです。

于 2013-09-18T21:23:57.303 に答える