私は以下のfuncを持っていて、field
を変数とし、value
を値として比較したいとします。どうしたらいいですか?変数の代わりに文字列名を使用するにはどうすればよいですか?
bool ReadFile::compareField(string field, string value)
{
if (field == "value")
}
私は以下のfuncを持っていて、field
を変数とし、value
を値として比較したいとします。どうしたらいいですか?変数の代わりに文字列名を使用するにはどうすればよいですか?
bool ReadFile::compareField(string field, string value)
{
if (field == "value")
}
あなたがC++について話しているのなら、答えは「できません。変数はコンパイル時のものです。実行時には存在しません。
パラメータに文字列としてアクセスする場合は、たとえば次のように使用することを検討してください。 std::map
:
class MyClass
{
private:
std::map<std::string, int> params;
public:
MyClass()
{
params["height"] = 165;
params["weight"] = 65;
params["legs"] = 2;
}
int getParam(const std::string &str) const
{
return params[str];
}
};
ああ、いいえ、あなたの前に私の変数が存在すると仮定します。私はそれにアクセスします。あなたのプログラムは新しい変数を初期化します。 – PersianGulf
@m_pahlevanzadeh:これは概念の証明です。明らかに、あなたが頑強にしたいのであれば、エラー処理などを追加する必要があります。 –
もちろん、正しく言うことができますが、私はimplementation.Soを追加する必要はありませんでした。前に@OliCharlesworth – PersianGulf
私は、次のFUNCにマップすることなく、上記のFUNCを変更:私は小文字、その後はstrstrのFUNCを検索するために変換し、しかし、ここで私の素敵なノートで最初に
bool ReadFile::compareField(string * field, string value){
int i;
string fieldName = *field;
//converting to lower case
for (i = 0; i< strlen(value.c_str());i++)
value[i] = tolower(value[i]);
for (i = 0; i< strlen(fieldName.c_str());i++)
fieldName[i] = tolower(fieldName[i]);
/////
cout << fieldName << endl;
if (strstr(fieldName.c_str(),value.c_str()) != NULL){
return true;
}
return false;
}
名前の代わりにその変数のアドレスを使用します。
私は残念なことに、このコードのためにdownvotesから-0です。これは、大文字と小文字を区別しない文字列のコンパイルの複雑なバージョンですが、2つのオペランド "field"と "value"を呼び出すことで、その事実を隠すことになります。 'field'パラメータはconst参照でなければならず、' fieldName == valueの代わりに 'strstr(fieldName.c_str()、value.c_str())!= NULLのような良い効果を伴わずにCとC++を混合しています。 ')。メソッド全体を 'boost :: iequals(field、value)'に置き換えるべきです。 – thiton
あなたは良い事例に言及しました。私はstrstr()をstrObj.substr()に置き換えます。あなたの注意に感謝します。@ thiton – PersianGulf
どのような言語ですか?あなたの質問に関連するタグを追加してください。 –
これはC/C++に関連しています。 @OliCharlesworth – PersianGulf