私は今自分で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」のみを割り当てました。助けてくれてありがとう!