2016-09-23 52 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

相關問題