2014-04-16 112 views
2

如果輸入是例如「香蕉」,我想打印香蕉的千卡。我想這樣的事情(和失敗):C++:使用輸入字符串作爲變量名稱

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; 
} 

的food.cpp代碼:

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

'的std :: unordered_map <的std :: string,CFood>'似乎合理的適合您的需求。 – WhozCraig

回答

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()等)

2

不幸的是C++的編譯語言,這意味着它會在編譯過程中丟失關於代碼中名稱的信息(轉換爲機器碼)。這意味着您不能在運行時使用代碼中的任何信息(類名稱,變量名稱等),而無需將其手動存儲在某處。如果您想這樣做,那麼您的運氣不佳 - 您需要使用動態/解釋型語言,例如PHP或JavaScript。

如果你想++,你需要根據程序輸入來創建一個哈希映射名稱 - >值項,然後顯示它的價值要做到這一點在C(MrDuk提供了他的回答很好的例子)。