如何输入变量名字符串,输出对应int/float/double类型变量数值?
实现输入变量名输出对应数值的方案
C++编译后会丢弃变量名信息,无法直接通过字符串获取对应变量的值,你需要手动建立变量名字符串与变量值/引用的映射关系,以下是具体实现方法:
核心思路
用容器存储变量名和对应值的映射,输入字符串后在容器中查找匹配项,根据变量类型输出对应数值。推荐使用C++17引入的std::variant来统一存储不同数值类型(int/float/double)。
完整代码示例
#include <iostream> #include <string> #include <map> #include <variant> #include <stdexcept> int main() { // 定义需要映射的变量 int SAMI = 24; float PI = 3.14f; double E = 2.71828; // 建立变量名到变量值的映射表 std::map<std::string, std::variant<int, float, double>> varMap = { {"SAMI", SAMI}, {"PI", PI}, {"E", E} }; std::string uD; std::cout << "输入变量名: "; std::cin >> uD; // 在映射表中查找变量名 auto it = varMap.find(uD); if (it != varMap.end()) { // 根据变量类型输出对应数值 std::visit([](auto&& value) { std::cout << value << std::endl; }, it->second); } else { std::cout << "未找到变量: " << uD << std::endl; } return 0; }
代码说明
std::variant<int, float, double>:可以存储这三种数值类型的任意一种,实现类型安全的多态存储。std::map<std::string, ...>:通过字符串键快速查找对应的变量值。std::visit:用于访问variant存储的具体类型,自动匹配对应的输出逻辑。
兼容旧C++版本的替代方案
如果你的环境不支持C++17,可以用std::map搭配基类封装实现:
#include <iostream> #include <string> #include <map> #include <stdexcept> // 基类统一接口 class VarBase { public: virtual void print() const = 0; virtual ~VarBase() = default; }; // 派生类存储具体类型 template<typename T> class Var : public VarBase { private: T value; public: Var(T val) : value(val) {} void print() const override { std::cout << value << std::endl; } }; int main() { int SAMI = 24; float PI = 3.14f; double E = 2.71828; std::map<std::string, VarBase*> varMap = { {"SAMI", new Var<int>(SAMI)}, {"PI", new Var<float>(PI)}, {"E", new Var<double>(E)} }; std::string uD; std::cout << "输入变量名: "; std::cin >> uD; auto it = varMap.find(uD); if (it != varMap.end()) { it->second->print(); delete it->second; } else { std::cout << "未找到变量: " << uD << std::endl; } // 释放剩余内存 for (auto& pair : varMap) { delete pair.second; } return 0; }
内容的提问来源于stack exchange,提问作者Mohammad QLFX
相关产品推荐
相关产品推荐

