3

私は今自分でC++を教えているので、かなり新しいです。私が学んでいる本の問題の質問の1つは、2つの文字列を比較するバイナリ述語を求めています。以下に私が書いたものをコピーしました。これは本当に単純な解決策の1つだと確信していますが、自分で理解することはできません。基本的に、私のエラーはifステートメントにあります。一致する場合は、一致した要素ではなく、常に最初の要素を出力します。それがなぜであるかを説明するのを手伝ってもらえますか?私は何が間違っているのですか?また、初心者として、「醜いコード」を見つけて、私がそれをクリーンアップできるように、あなたが別の方法で書くものを特定できれば幸いです。ありがとう!

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

using namespace std;

//my comparison predicate starts here

struct comparison{
    string deststring1;
    string deststring2;

comparison (const string& whattheyenter){
    deststring1.resize(whattheyenter.size());
    transform(whattheyenter.begin(),whattheyenter.end(),deststring1.begin(),tolower);
    }

bool operator () (const string& string2) {
    deststring2.resize(string2.size());
    transform(string2.begin(),string2.end(),deststring2.begin(),tolower);
    return (deststring1<deststring2);
    }
};


  //program begins here

int main(){
    string comparethisstring;

    cout<<"enter string to compare: "<<endl;
    cin>>comparethisstring;

    vector<string> listofstrings;

    listofstrings.push_back("my fiRst string");
    listofstrings.push_back("mY sEcond striNg");
    listofstrings.push_back("My ThIrD StRiNg");

    auto ielement = find_if(listofstrings.begin(),listofstrings.end(),comparison(comparethisstring));

    if (ielement!=listofstrings.end()){
          // when there is a match this always prints "my fiRst string" instead of 
          // pointing to the element where the match is.
        cout<<"matched:" <<*ielement; 
    }
    else {
        cout<<"no match found!";
    }

return 0;
}

編集:問題は、最初に、等式を比較するために使用されない、より小さい演算子を使用したことです。次に、getlineの代わりにcinを使用しました。その結果、「my first string」と入力すると、cinはcomparethisstringに「my」のみを割り当てました。助けてくれてありがとう!

4

1 に答える 1

1

find_ifは、予測値が である最初の要素を見つけtrueます。あなたの予測は「アルファベット順で より前ですか。おそらく true を返す必要があるのは、等しい場合(または)comparethisstringの場合のみです。comparethisstringdeststring1==deststring2

deststring2また、変数をメソッドに対してローカルにすることをお勧めしますoperator()

于 2012-12-18T00:53:43.343 に答える