Jadi, inilah kode saya saat ini:

#include <iostream>
using namespace std;

int main() {
    string x = "_one";
    int sound_one = 7;
    int sound_two = 8; 
    cout << ("sound") + x;
}

Namun ketika saya menjalankan kode, itu menghasilkan 'sound_one' bukan '7'. Bagaimana saya membuatnya mengeluarkan variabel sound_one alih-alih hanya 'sound_one'? Juga, saya membutuhkannya sehingga saya dapat mengubah x ke hal yang berbeda (misalnya '_two') sehingga akan menghasilkan sound_two sebagai gantinya. Bantuan apa pun akan sangat dihargai.

c++
1
Jack 4 Januari 2021, 17:51

3 jawaban

Jawaban Terbaik

C++ bukanlah bahasa reflektif dalam artian bahwa Anda dapat memperoleh nama variabel saat runtime (nama variabel biasanya dikompilasi dari program). Anda dapat menggunakan std::map untuk mencapai tujuan langsung Anda:

#include <iostream>
#include <string>
#include <map>
 
int main() {
    using std::literals::string_literals::operator""s;

    std::string x = "_one";
    std::map<std::string, int> data;
    data["sound_one"] = 7;
    data["sound_two"] = 8;
    std::cout << data["sound"s + x];
}

Perhatikan notasi "sound"s: akhiran s menunjukkan std::string literal yang ditentukan pengguna.

3
Bathsheba 4 Januari 2021, 15:07

Anda tidak dapat melakukannya di C++. Anda dapat menggunakan peta seperti yang ditunjukkan dalam jawaban lain, tetapi saya merasa yang benar-benar Anda butuhkan adalah array:

#include <format>
#include <iostream>

int main()
{
    int data[] { 7, 8 };
    std::cout << std::format("data[{}] = {}\n", 0, data[0]);
}

Array biasanya lebih baik untuk urutan sederhana seperti itu.

1
Ayxan Haqverdili 4 Januari 2021, 15:22

Anda tidak dapat membuat variabel dari string dengan cara ini. Solusinya adalah menggunakan pernyataan if/switch hingga nama variabel cocok dan kemudian mencetaknya:

if(x == "_one") {
   cout << sound_one;
}
else if(x == "_two") {
   cout << sound_two;
}
else {
   cout << "no match";
}
1
Chris Wilhelm 4 Januari 2021, 14:59