-2

私が書いている DL リストのこの検索機能が機能しない理由がわかりません。問題は、tempNode->data と s の比較が失敗していることです。データが等しいにもかかわらず、比較は偽と評価されています。理由を知っている人はいますか?

bool DoublyLinkedList::find(string& s)
{
if(empty())
    return false;
else
{
    Node* tempNode = head;
    do{
        if(*(tempNode->data) == s)
        {
            return true;
        }
        tempNode = tempNode->next;
    } while(tempNode != NULL);
    return false;
}
}
class Node
    {
        public:
            Node* next;
            Node* prev;
            string* data;
            Node(){next = NULL; prev = NULL; data = NULL;};
            ~Node(){delete prev; delete next; delete data; next =  NULL; prev = NULL; data = NULL;};
    };
4

3 に答える 3

0

これをコメントとして書きたかったのですが、そうするのに十分な評判がありません。

文字列のアドレスを比較するのではなく、文字列自体を比較する必要があります(少なくともあなたの場合)。また、文字列の大文字と小文字の比較にも注意してください。大文字と小文字を区別する比較を行うか、区別しない比較を行うかを必ず指定してください。

さらに、一時的な文字列オブジェクトを作成する必要はなく、関数に渡される仮パラメーター自体を使用できます。一時変数を作成したい場合でも、メモリ リークを避けるために shared_ptr または unique_ptr の使用を検討する必要があります。

Stephan T Lavavej は最近、Going Native について優れた講演を行っています。ぜひご覧になることをお勧めします。現在、ウェブサイトはダウンしており、サイトが復旧したときにリンクを追加できます。

また、入力パラメーターを誤って変更しないように、仮パラメーターを const として作成します。

于 2013-09-09T23:56:49.830 に答える