2016-04-11 15 views
1

Ben bir öğrencinin okul için bir projem var, ben çoğunlukla PHP'de programlama yapıyorum, bu yüzden C++ benim güçlü tarafım değil :) Lütfen bana söyleyeyim, cin dizesinde bahsettiğim değişkeni değiştirmek mümkün mü? Ben bir B ADD gibi bir şey yapacak Yukarıdaki koddaGiriş dizesinde belirtilen değişken nasıl değiştirilir?

#include <iostream> 
#include <string> 
#include <sstream> 

using namespace std; 

string A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, Q, S, T, U, V, W, X, Y, Z; 
string instrukcja; 
string krok[3]; 
int i = 0; 

string MAKENULL() 
{ 
    return " "; 
} 

void WRITE(string x) 
{ 
    cout << x; 
} 

int main() 
{ 
    // get instruction Begin 
    char s[10]; 
    scanf("%10[0-9a-zA-Z ]", s); 
    istringstream iss(s); 
    while(iss) 
    { 
     string sub; 
     iss >> sub; 
     krok[i] = sub; 
     i++; 
    } 
    // get instruction End 


    if (krok[0] == "MAKENULL") 
    { 
     "" Variable in krok[1] "" = MAKENULL(); 
    } 

    if (krok[0] == "WRITE") 
    { 
     WRITE("" Variable in krok[1] ""); 
    } 

    if (krok[0] == "OPPOSITE") 
    { 
     OPPOSITE("" Variable in krok[1] "", "" Variable in krok[2] "") 
    } 

} 

ve A (diğer bir dize sopa) A => A + B oldu olmalıdır: Belki aşağıda benim kod daha anlaşılır olacaktır. Ana soru, bir değişkeni scanf olarak değiştirebilir miyim?

#include <map> 
// ... 
std::map<std::string, std::string> varMap; 
anahtar değişken adıdır

: A, B, C ve değerini

+0

Ne yapmak istediğinizi tam olarak açık değil. İki dizeyi birleştirmek mi istiyorsun? ve OPPOSITE() nedir? – user463035818

+0

Belki tüm projeyi açıklamaya çalışacağım. Kayıtlar (AZ) olacak ve bu program sadece komutla (döngü içinde) bir girdi alacak (ADD A, Z; OPPOZİT A, W; WRITE A vb ...) ve şimdi ihtiyacım olan noktaya işaret edebilirim scanf/cin'te belirli bir değişken değişecek mi? –

+0

Eğer sizi doğru anlıyorsam, değerleri temsil eden değişkenlere (yani, A dizesi, B, ... ') dizgi gösterimlerinden (" A "," B "...) bir kaç eşleme sağlamanız gerekir. . 'Std :: map ' tuşlarını kullanabilirsiniz. Burada anahtar, 'scanf' den aldığınız 'string 've değer (yani haritadaki ikinci dizge)' dir. Değiştirmek istediğiniz değer – user463035818

cevap

2

şimdi A, B, C, ... sen map container ihtiyaç yerine olarak değişkenleri tutmanın ardından doğru anlasalardı onun bir değeridir.

varMap["A"] = newValue; 

ve bunu okuduğunda da std::string value = varMap["A"] kullanabilirsiniz, ancak "eğer burada dikkatli olun: Eğer değişken A'ya değer verdiğinizde

Sonra ardından kullanmak, okuma geçerli yolu kullanabilirsiniz Bir "haritada bulunmaz, oluşturulacak ve değer başlatılacaktır (varsayılan kurucu çağrılır - böylece boş dizge olacaktır). Anahtar exsists if (varMap.find("A") == varMap.end()) {/*no such variable*/}

Başka bir şey kullanmak olmadığını kontrol etmek için bir şey kullanmadan önce okundu eğer kullanım kontrol etmelidir yanlış istringstream yani, düzgün deyim geçerli:

istringstream iss(s); 
string sub; 
while(iss >> sub) 
{ 
    krok[i] = sub; 
    i++; 
} 

[değiştir]

Muhtemelen aklınızdan geçenler, variable variables concept gibi php veya java ve diğer dillerden yansıma yapmak için bir olasılıktı. C++ 'da böyle bir şey yoktur ve önerilen yol - php'de olduğu gibi harita gibi ilişkisel konteynır kullanmaktır.

+0

Çalışabilir ... Ben geri bildirim vermeye çalışacağım :) Teşekkür ederim! –

+0

Doğru bir şekilde anlarsam, bu bir çeşit dizidir, ancak sayı yerine, karakter vardır, değil mi? –

+0

'İlişkilendirilmiş kapsayıcı '- ancak bunu dizin olarak" std :: string "dizisiyle düşünebilirsiniz. – marcinj

İlgili konular