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

C++如何通过std::cin输入的字符串按名称查找对应变量值

问题背景

我正在开发一款购物车程序,需要实现的逻辑为:程序提示输入商品时,用户输入对应商品名称后,程序要记录该商品对应的取值,供后续代码逻辑调用。
当前编写的代码如下:

#include <iostream>

int main() {
    int item{};
    int apple = 5;
    std::cout << "what item do you want to buy?";
    std::cin >> item;
    std::cout << item;
    return 0;
}

运行上述代码时,如果输入apple,输出结果为0。预期实现效果为:输入apple时,变量item能够获取到同名变量apple对应的数值5。

问题原因

C++是静态编译型语言,代码里定义的变量名(比如示例中的apple)在编译完成后会被替换为内存地址引用,运行阶段不存在“输入变量名文本直接读取对应变量值”的内置反射机制。
当前代码中item被定义为int整数类型,std::cin读取整数时遇到非数字的字符串输入(比如apple)会直接进入读取失败状态,不会给item写入新值,item会保持初始化时的0值,因此最终输出0。

实现方案

你需要先建立「商品名称字符串 -> 商品对应取值」的映射关系,先读取用户输入的字符串格式的商品名,再从映射关系中匹配对应的取值即可。C++标准库提供的std::unordered_map/std::map键值对容器是最适合该场景的实现方式,修改后的可运行代码如下:

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    // 初始化商品名到对应取值的映射表
    std::unordered_map<std::string, int> item_map = {
        {"apple", 5}
        // 后续新增商品只需在此添加键值对即可,例如 {"banana", 3}, {"orange", 2}
    };

    std::string input_name;
    std::cout << "what item do you want to buy?";
    std::cin >> input_name;

    // 校验输入商品是否存在于映射表中
    if (item_map.count(input_name)) {
        int item = item_map[input_name];
        std::cout << item << std::endl;
    } else {
        std::cout << "The entered item does not exist" << std::endl;
    }

    return 0;
}

如果商品数量极少,也可以用字符串比较的分支判断实现,不需要引入额外容器:

#include <iostream>
#include <string>

int main() {
    std::string input_name;
    int item = 0;
    std::cout << "what item do you want to buy?";
    std::cin >> input_name;

    if (input_name == "apple") {
        item = 5;
        std::cout << item << std::endl;
    } else {
        std::cout << "The entered item does not exist" << std::endl;
    }

    return 0;
}
注意事项
  • 不要直接给整数类型变量输入字符串内容,会触发输入流的失败状态,若后续还有输入操作需要调用std::cin.clear()重置流状态,同时清空缓冲区残留数据。
  • 商品数量较多时优先使用键值对容器维护映射关系,新增、修改商品取值不需要改动核心业务逻辑,只需要更新映射表内容,可维护性远高于多分支判断写法。

内容的提问来源于stack exchange,提问作者Maravic Karlo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:45:32