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

能否将字符串转为变量名,并在for循环中按索引对比对应变量?

问题解答

不行,C++ 无法直接通过字符串转换来动态获取变量名对应的变量——编译阶段变量名就会被替换为内存地址,运行时程序不会保留变量名的标识信息,所以没法通过拼接出来的"P1""P3"这类字符串直接找到对应的变量。

更简洁高效的解决方案是改用数组存储这些值,利用数组索引和循环变量i、j对应:

方案1:从0开始索引的数组

// 用数组替代单独变量,P[0]对应原P1,P[1]对应原P2...
int P[] = {400, 350, 204, 235};

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        // 对比原Pi+1和Pj+1的值
        if (P[i] > P[j]) {
            // 执行你的对比逻辑
        }
    }
}

方案2:从1开始索引的数组(更贴合你的变量命名习惯)

如果习惯用1~4的索引,可以定义长度为5的数组,跳过索引0:

int P[5];
P[1] = 400;
P[2] = 350;
P[3] = 204;
P[4] = 235;

for (int i = 1; i <= 4; i++) {
    for (int j = 1; j <= 4; j++) {
        // 直接用i、j作为索引,对比P[i]和P[j]
        if (P[i] < P[j]) {
            // 执行你的对比逻辑
        }
    }
}

备选方案:用map映射(不推荐)

如果非要模拟"字符串找变量"的逻辑,可以用std::map建立字符串到值的映射,但这种方式效率低且没必要,仅作参考:

#include <map>
#include <string>

std::map<std::string, int> p_map;
p_map["P1"] = 400;
p_map["P2"] = 350;
p_map["P3"] = 204;
p_map["P4"] = 235;

for (int i = 1; i <= 4; i++) {
    for (int j = 1; j <= 4; j++) {
        std::string key_i = "P" + std::to_string(i);
        std::string key_j = "P" + std::to_string(j);
        int val_i = p_map[key_i];
        int val_j = p_map[key_j];
        // 执行对比逻辑
    }
}

综上,数组是最适合你需求的方案,代码更简洁、运行效率更高。

内容的提问来源于stack exchange,提问作者Jaewoo Shin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:09:26