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

Use input string as variable name

本文关键字:变量名 字符串 输入      更新时间:2023-10-16

如果输入是例如"香蕉",我想打印香蕉的kcal。我尝试过这样的东西(但失败了):

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

我知道我可以用if语句来做,比如:

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

但当我有1000多种食物时,我必须写很多代码。。。

这是我对香蕉对象的声明和定义。每个物体都有千卡热量。

food banana;
banana.Kcal = 89;

我的班级,Food.h代码:

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

食品.cpp代码:

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

将所有食物储存在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()等)

不幸的是,C++是一种经过编译的语言,这意味着它在编译过程中(翻译成机器代码)会丢失代码中的名称信息。这意味着您不能在运行时使用代码中的任何信息(类名、变量名等),而不手动将其存储在某个位置。如果你想这样做,你就不走运了——你需要使用动态/解释语言,比如PHP或JavaScript。

如果你想在C++中做到这一点,你需要创建一个带有名称->值条目的哈希图,然后根据程序输入显示它的值(MrDuk在他的回答中提供了一个很好的例子)。