You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何输入变量名字符串,输出对应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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 05:33:58