Как использовать имя строки вместо переменной? - PullRequest
0 голосов
/ 17 декабря 2011

Предположим, у меня есть следующая функция и я хочу сравнить field как переменную и value как значение.Как я могу это сделать?

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

Ответы [ 2 ]

4 голосов
/ 17 декабря 2011

Если вы говорите о 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 голосов
/ 18 декабря 2011

Я изменил вышеупомянутую функцию без сопоставления на следующую функцию:

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, но здесь приятно отметить, что я использую адрес этой переменнойвместо его имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...