2014-04-16 3 views
2

입력이 "banana"인 경우 바나나의 kcal을 인쇄하려고합니다. 나는 이런 식으로 뭔가를 시도 (실패) : 다음 이상이있을 때 나는 매우 많은 코드를 작성해야합니다C++ : 입력 문자열을 변수 이름으로 사용

string input; 
cin >> input; 

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

그러나이 : ​​

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

는 내가 같은 문장-경우와 함께 할 수 있다는 사실을 알고 1000 식품 ...

내 바나나 개체에 대한 선언 및 정의가 있습니다. 모든 물체에는 kcal이 있습니다.

food banana; 
banana.Kcal = 89; 

내 클래스의 Food.h 코드 :

#pragma once 

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

food.cpp 코드하십시오 std::map 또는 관련 용기에

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

'std :: unordered_map '는 사용자의 필요에 알맞은 것으로 보입니다. – WhozCraig

답변

7

저장하여 식품의 모든 및 액세스 그들 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++에서 이것을 수행하려면 name-> value 항목이있는 해시 맵을 작성한 다음 프로그램 입력을 기준으로 값을 표시해야합니다 (MrDuk이 답변에서 우수 사례를 제공함).

관련 문제