能否将字符串转为变量名,并在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
相关产品推荐
相关产品推荐

