2011-12-17 34 views
0

私は以下のfuncを持っていて、fieldを変数とし、valueを値として比較したいとします。どうしたらいいですか?変数の代わりに文字列名を使用するにはどうすればよいですか?

bool ReadFile::compareField(string field, string value) 
{ 
    if (field == "value") 
} 
+4

どのような言語ですか?あなたの質問に関連するタグを追加してください。 –

+0

これはC/C++に関連しています。 @OliCharlesworth – PersianGulf

答えて

4

あなたが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]; 
    } 
}; 
+0

ああ、いいえ、あなたの前に私の変数が存在すると仮定します。私はそれにアクセスします。あなたのプログラムは新しい変数を初期化します。 – PersianGulf

+0

@m_pahlevanzadeh:これは概念の証明です。明らかに、あなたが頑強にしたいのであれば、エラー処理などを追加する必要があります。 –

+0

もちろん、正しく言うことができますが、私はimplementation.Soを追加する必要はありませんでした。前に@OliCharlesworth – PersianGulf

0

私は、次の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; 
} 

名前の代わりにその変数のアドレスを使用します。

+0

私は残念なことに、このコードのためにdownvotesから-0です。これは、大文字と小文字を区別しない文字列のコンパイルの複雑なバージョンですが、2つのオペランド "field"と "value"を呼び出すことで、その事実を隠すことになります。 'field'パラメータはconst参照でなければならず、' fieldName == valueの代わりに 'strstr(fieldName.c_str()、value.c_str())!= NULLのような良い効果を伴わずにCとC++を混合しています。 ')。メソッド全体を 'boost :: iequals(field、value)'に置き換えるべきです。 – thiton

+0

あなたは良い事例に言及しました。私はstrstr()をstrObj.substr()に置き換えます。あなたの注意に感謝します。@ thiton – PersianGulf

関連する問題