如何使用字符串名称而不是变量?

时间:2011-12-17 11:46:00

标签: c++ c function variables

假设我有以下函数,并希望将field作为变量和value作为值进行比较。我该怎么办?

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

2 个答案:

答案 0 :(得分: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];
    }
};

答案 1 :(得分:0)

我将上面的func更改为没有map到以下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;
}

首先我转换为小写,然后使用strstr func进行搜索,但这里有一个很好的说明,我使用该变量的地址而不是其名称。