C ++:使用输入字符串作为变量名

时间:2014-04-16 18:21:39

标签: c++ class

如果输入是例如“banana”,我想打印香蕉的千卡。我试过这样的事情(并且失败了):

string input;
cin >> input;
cout << input.Kcal << endl;

我知道我可以使用if语句来执行此操作,如:

string input;
cin >> input;

if(input == "banana")
{
    cout << banana.Kcal << endl;
}

但是当我有超过1000种食物时,我必须写很多代码...

我的香蕉对象的声明和定义。每个对象都有kcal。

food banana;
banana.Kcal = 89;

我的班级,Food.h代码:

#pragma once

class CFood
{
public:
    CFood();
    ~CFood();
    float Kcal;
}

food.cpp代码:

CFood::CFood()
{
    Kcal = 0;
}
CFood::~CFood()
{
}

2 个答案:

答案 0 :(得分:7)

将所有食物存放在std::map或相关容器中,并通过string键访问它们:

std::map<string, Food> Foods;
Foods.insert(std::make_pair("banana", Banana));

// later..

cin >> stuff;
cout << Foods.at(stuff).kcal << endl;

请注意,上述内容是伪的,您通常需要制定一些保护措施来保护您的项目不会崩溃(例如,检查Foods.find(stuff) != Foods.end()等)。

答案 1 :(得分:2)

不幸的是,C ++是一种编译语言,这意味着它会在编译过程中丢失有关代码名称的信息(转换为机器代码)。这意味着您无法在运行时使用代码中的任何信息(类名,变量名等),而无需手动将其存储在某处。如果你想这样做,你在这里运气不好 - 你需要使用动态/解释语言,如PHP或JavaScript。

如果你想在C ++中这样做,你需要创建一个带有name-&gt; value条目的哈希映射,然后根据程序输入显示它的值(MrDuk在他的回答中提供了很好的例子)。