2014-01-21 112 views
3

第一次發佈,所以要溫柔。我已經開始自學C++了,因爲我一直有興趣,並且對將來的工作也很有用。使用輸入字符串作爲函數名稱C++

好吧,所以我寫了一個非常基本的程序,可以根據用戶輸入添加,減去,乘除或除。

我的問題是我可以使用用戶輸入作爲字符串,並使用它來調用一個函數?

見下面的代碼: -

#include <iostream> 
#include <string> 

using namespace std; 

// Addition Function 
int Add (int a, int b) 
{ 
int r; //Result 
r=a+b; //formula 
return r; //return result of formula 
} 

// Subtraction Function 
int Subtract (int a, int b) 
{ 
int r; //Result 
r=a-b; //formula 
return r; //return result of formula 
} 

// Multiply Function 
int Multiply (int a, int b) 
{ 
int r; //Result 
r=a*b; //formula 
return r; //return result of formula 
} 

// Divide Function 
int Divide (int a, int b) 
{ 
int r; //Result 
r=a/b; //formula 
return r; //return result of formula 
} 

// Main 
int main() 
{ 
int ip1, ip2, z; 
string option; 


cout << "Enter first number: "; 
cin >> ip1; 
cout << "Enter second number: "; 
cin >> ip2; 
cout << "What would you like to do?, Please type an option (Options: Add, Subtract, Multiply, Divide)\n"; 
getline(cin,option); 
z = option (ip1,ip2); 
cout << "The result is " << z; 
} 

所以我要求用戶輸入一個選項,即添加,然後程序佔用該字符串(添加),並使用它來調用添加功能。

目前即時得到一個「敵不過呼叫 '(的std :: string {又名性病:: basic_string的})(INT &,詮釋&)' 的錯誤在編譯

任何幫助,將不勝感激

感謝 劉易斯

+0

你可以使用'std :: map >',然後執行'z = myMap [option](ip1,ip2);' – Borgleader

回答

3

您可以使用一個非常簡單的if條件樹:

 if (option == "Add")   z = Add(ip1, ip2); 
else if (option == "Subtract") z = Subtract(ip1, ip2); 
else if (option == "Multiply") z = Multiply(ip1, ip2); 
else if (option == "Divide")  z = Divide(ip1, ip2); 

或者,您可以使用std::mapstd::string映射到相應的函數指針。它可能是更清潔,但絕對不再寫:

std::map<std::string, std::function<int(int, int)>> mapping; 
mapping["Add"]  = &Add; 
mapping["Subtract"] = &Subtract; 
mapping["Multiply"] = &Multiply; 
mapping["Divide"] = &Divide; 

if (mapping.find(option) == mapping.end()) 
    // there's no such an option 
z = mapping[option](ip1, ip2); 

在這種特殊情況下,你甚至可以不用std::function,只是使用C函數指針(對於非std::function愛好者):

std::map<std::string, int(*)(int, int)> mapping; 

請注意,您可以在函數聲明中刪除大量代碼行和臨時變量:

int Add (int a, int b)  { return a + b; } 
int Subtract (int a, int b) { return a - b; } 
int Multiply (int a, int b) { return a * b; } 
int Divide (int a, int b) { return a/b; } 
+0

I認爲你的意思是'std :: function '。不要稱之爲地圖:P – Borgleader

+1

非常感謝您的建議。 – user3219841

+0

感謝您的幫助。我最終使用了If語句,因爲它也使我能夠使用if和else等。 – user3219841

相關問題