Frage von gerlochi, 71

Wie setze ich dies um(C++)?

Also, ich habe einen Text, Beispiel:

a: 12345 :

Dies soll bald eine Funktion in meiner kleinen selbst erstellten esoterischen Programmiersprache werden. Ich weiß schon wie ich den Funktionsnamen setzen und abrufen kann, jedoch fehlt mir die Methode dass ich den Wert (jedes Zeichen einzelnd) speichern kann.

Ich dachte erst an einnen Vektor oder Array, aber das scheint mir nicht zu klappen, habt ihr eine Idee wie ich dies umsetzen kann? Eine Methode wäre ja noch einfach(aber auch dumm), aber dann mehrere?

Ich weiß noch nicht, wie ich dies umsetzen soll.

Danke für alle sinnvollen Antworten, gerlochi.

PS: Arbeite auf Linux, kann also keine Visual-C++ Header verwenden.

Antwort
von Orsovai, 47

Warum brauchst Du C++, wenn Du eine eigene Sprache entwerfen willst. Du musst Dich vielmehr mit dem Bau eines Compilers auseinandersetzen.

Oder willst Du C++ als Zwischensprache verwenden? Dazu eignet sich C++ nicht allzu gut und Du greifst lieber direkt auf C zurück. Es gibt sogar eine Entwicklung von C, die extra als Zwischensprache konzipiert ist, C- heißt sie.

Kommentar von gerlochi ,

Es soll keine Kompilierte Sprache werden, es soll ein Interpreter heralten. Wie meinst du das mit "Zeischensprache"? Meinst du damit die Sprache die ich zum entwickeln verwende? Wenn ja, dann: Warum soll ich C++ nicht verwenden? Ich finde es angemessen und es war auch meine erste Entscheidung den Interpreter in C++ zu schreiben. Aber danje trotzdem für den Tipp!

Kommentar von Orsovai ,

Ah verstehe.

Mit Zwischensprache meine ich folgendes:
Haskell wird zum Beispiel zunächst in C Code umgewandelt und anschließend von C in Maschinencode kompiliert.

Kommentar von gerlochi ,

Ah, ok. Danke dir :)

Kommentar von gerlochi ,

ich habe es gerade nochmal durchgeschaut und gesehen dass du einen string einliest und dann alles aufsplitest. das habe ich aber alles schon in meinem interpreter verbaut... ich muss halt nur einen weg find4n, methoden in mein programm einzubauen. name und code in der funktion aufzurufen wäre gar nicht das problem, mein problem ist: wo soll ich die funktionen speichern? die naen würde ich in den vector einbauen, aber der code in den funktionen? wo soll der hin? ich glaube einfachmeine frage falsch formuliert zu haben, dafür muss ich mich entschuldigen (und für die ganzen rechtsschreibfehler, sitze leider am handy).

Antwort
von Orsovai, 26

Deine Frage kann ich Dir vermutlich dennoch beantworten.

Gucken wir uns mal Dein Beispiel an:

int main(){
string s;
istringstream ein;
char c;

getline(cin,s); //Speichert die ganze Zeile in s
ein.str(s); //s wird auf den Stream ein geladen

z=ein.peek(); //Das nächste Zeichen von ein angucken

ein >> z; //Stream ein um 1 "weiterschieben"
}

Wenn Du jetzt z.B. Deine Zeichenfolge :1234: in einen char Vektor speichern willst, dann machst Du das wie folgt:

using namespace std;

int main(){

string s;
istringstream ein;
vector z;
int i=0;
char c;

cout << "Eingabe:";
getline(cin,s);
ein.str(s);

while(ein.eof()!=true){
c=ein.peek();
ein >> c;
z.push_back(c);

cout << z[i] << endl;
i++;
}
return 0;
}
Kommentar von gerlochi ,

Danke nochmal!

Expertenantwort
von guenterhalt, Community-Experte für Computer & Linux, 22
char string[]="a: 12345 :
char  *pointer;
int index;
char array[20] ;i=0;
pointer=string;
while ( 1 ) { if ( *pointer == '\0' ) break;
                   array[i] = *pointer;
                   i++;
                   pointer++;
                   array[i]='\0';
                 }
printf("%s\n",string);
i=0;
while ( array[i] != '\0' )  printf("%c",array[i++]);
printf("\n");
Kommentar von gerlochi ,

Dake dir!

Kommentar von gerlochi ,

Jetzt muss ich aber mehrere von diesen Werten einlesen, speichern und abrufen. Schlussendlich sollen es Funktionen in meiner interpretierten Programmiersprache sein. So kann ich mit einem Wert arbeiten, aber mehrere?

Kommentar von Orsovai ,

Darum meine Lösung :) lass jede Zeile durch einen Stringstream einlesen und nutze Vektoren statt Arrays, bei denen kannst Du nämlich dynamisch Elemente anhängen und musst die Größe nicht von Vorhinein kennen bzw. die Größe vor dem Befüllen ermitteln.

Keine passende Antwort gefunden?

Fragen Sie die Community