使用输入字符串作为函数名称c ++

时间:2014-01-21 15:38:27

标签: c++ notepad++

第一次张贴所以要温柔。我开始自学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;
}

所以我要求用户键入一个选项,即Add,然后程序接受该字符串(Add)并使用它来调用Add函数。

目前我在编译时遇到'不匹配'(std :: string {aka std :: basic_string})(int&amp;,int&amp;)'错误

任何帮助将不胜感激

由于 路易斯

1 个答案:

答案 0 :(得分: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; }