2016-09-23 92 views
-2

我想让num显示nr1,nr2和nr3的值。任何想法?谢谢!!如何在C++中的变量中使用变量?

#include <iostream> 
#include "../std_lib_facilities.h" 

using namespace std; 

int main() { 
    int count=3; 
    string num; 
    double nr1=111; 
    double nr2=222; 
    double nr3=333; 

    for(int i=1;i<=count;i++) { 
     ostringstream number {}; 
     number << "nr" << i; 
     num=number.str(); 
     cout << "Num: " << num << endl; 
    } 
} 
+1

你不能得到通过vairable号访问变量NR1,NR2,NR3。 – pavnik

+1

将数字放在数组中 – NathanOliver

+1

没有办法将字符串转换为标识符 – Raindrop7

回答

2

如果你的意图是通过运行时字符串引用一个变量,你不能这样做。 (例如在php你可以用$$variable做到这一点,在C++没有那种功能)。

最相似的方法是使用预处理打,但我强烈建议你不要去,因为平时那种解决方案都相当“脏”

最简单和最佳的解决方案是使用数组,然后使用索引访问变量。

一个小例子:

int main(int argc, char *argv[]) { 
    std::array<double, 3> nrs = {111, 222, 333}; 
    for (int i = 0; i < nrs.size(); ++i) { 
    std::cout << "Num" << i + 1 << ": " << nrs[i] << '\n'; 
    } 

    return 0; 
} 

有一个很多这种方法的变种,例如:你可以使用std::vector是在编译时没有定义的变量的数目。

我认为这将解决您的问题。

无论如何只是为了完整性,还有另一种方法来“地址”一个名称的变量。原理相同,但不使用数字索引,您可以使用字符串名称。

这可以通过使用maphash来实现。

int main(int argc, char *argv[]) { 
    std::map<std::string, double> nrs = {std::make_pair("nr1", 111), 
             std::make_pair("nr2", 222), 
             std::make_pair("nr3", 333)}; 

    for (int i = 0; i < nrs.size(); ++i) { 
    std::string num = "nr" + std::to_string(i + 1); 
    std::cout << num << ": " << nrs.at(num) << '\n'; 
    } 

    return 0; 
} 

因此,使用方法at您可以访问与该名称关联的值。

注意:如果找不到变量名,并且您尝试访问异常将被抛出。

1

做到这一点的典型方法是使用std::map这样的:

int main() 
{ 
    std::map<std::string, double> nums; 

    nums["nr1"] = 111; 
    nums["nr2"] = 222; 
    nums["nr3"] = 333; 

    for(int i = 1; i <= 3; i++) 
    { 
     std::ostringstream number; 
     number << "nr" << i; 
     std::string num = number.str(); 
     std::cout << "Num: " << nums[num] << '\n'; 
    } 
} 
+0

@Biagio Festa:thx,就是这样! Galik的代码也工作。 – phySical

相关问题