2016-04-11 6 views
1

Ich habe ein Schülerprojekt für die Schule, ich programmiere hauptsächlich in PHP, also ist C++ nicht meine starke Seite :) Bitte lassen Sie mich wissen, ist es möglich, die Variable zu ändern, die ich in cin string erwähne? Vielleicht wird mein Code unten verständlicher sein:Wie ändert man die in der Eingabezeichenfolge angegebene Variable?

#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] "") 
    } 

} 

In obigen Code ich etwas tun wird, wie ein B ADD, und A sollte sich A => A + B (ein String-Stick zum anderen). Hauptfrage ist, kann ich eine Variable auf scanf ändern?

+0

Es ist nicht wirklich klar, was Sie tun möchten. Sie möchten zwei Strings verketten? und was ist "GEGENSTAND()"? – user463035818

+0

Vielleicht werde ich versuchen, das ganze Projekt zu erklären. Es wird Register (AZ) geben, und dieses Programm bekommt nur eine Eingabe (in Schleife) mit Anweisungen (wie ADD A, Z; GEGENTEIL A, W; WRITE A usw.) und das brauche ich jetzt, kann ich zeigen in scanf/cin eine bestimmte Variable zu ändern? –

+0

Wenn ich Sie richtig verstehe, müssen Sie eine Zuordnung von den Zeichenfolgendarstellungen ("A", "B" ...) zu den Variablen bereitstellen, die die Werte enthalten (dh die Zeichenfolgen A, B, ...). . Sie können eine 'std :: map ' verwenden, wobei der Schlüssel die 'string' ist, die Sie von' scanf' erhalten, und der Wert (dh die zweite string in der Map) ist Wert, den Sie ändern möchten – user463035818

Antwort

2

Wenn ich das richtig verstanden, dann anstelle von Variablen wie jetzt A zu halten, B, C, ... Sie benötigen einen map container:

#include <map> 
// ... 
std::map<std::string, std::string> varMap; 

wo Schlüssel ist der Variablenname: A, B, C und Wert ist ein Wert.

Dann können Sie Ihre aktuelle Lesart verwenden, wenn Sie Wert der Variablen A zuweisen, dann verwenden Sie:

varMap["A"] = newValue; 

und wenn Sie es lesen Sie auch std::string value = varMap["A"] verwenden, aber vorsicht hier sein, wenn " Ein "existiert nicht in der Map, es wird erstellt und der Wert initialisiert (der Standardkonstruktor wird aufgerufen - so dass es eine leere Zeichenkette ist). wenn Schlüssel exsists if (varMap.find("A") == varMap.end()) {/*no such variable*/}

Eine andere Sache, um zu überprüfen, ist, dass Sie istringstream Nutzung falsch ist, sollten Sie überprüfen, ob etwas, bevor Sie es gelesen wurde, die richtige Idiom ist:

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

[Bearbeiten]

Was Sie wahrscheinlich im Sinn hatten, war eine Möglichkeit, PHP wie variable variables concept, oder Reflexion von Java und anderen Sprachen zu verwenden. Es gibt keine solche Sache in C++, und der empfohlene Weg - wie auch in PHP ist assoziative Container wie Karte zu verwenden.

+0

Es könnte funktionieren ... Ich werde versuchen und Feedback geben :) Danke! –

+0

Wenn ich richtig verstehe, ist es eine Art Array, aber statt Zahlen gibt es Zeichen, oder? –

+0

'Assoziativer Container' - aber Sie könnten dies als ein Array mit' std :: string' als Indizes denken. – marcinj

Verwandte Themen