gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:22:10 25 4
gpt4 key购买 nike

第一次发帖,请多多关照。我已经开始自学 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&, int&)'错误

任何帮助将不胜感激

谢谢刘易斯

最佳答案

您可以使用一个非常简单的 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; }

关于c++ - 使用输入字符串作为函数名 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com