String Verarbeitung /Manipulation
-
Hallo
Ich habe folgendes Problem:Ich habe einen Parameter an die main übergeben.
__argv[1]; -> dort steht bspw. "a;b;c" drinnun möchte ich diesen String in eine Liste schreiben.
Das prinzip ist mir eigentlich klar, nur die Umsetzung bereitet Probleme.Ich möchte es wie folgt machen.
Ich möchte den Stirng nach der Zeichenfolge ";" durchsuchen lassen.
Danach würde er ja bei dem ersten ";" stehen bleiben. Nun müßte ich die Stelle wissen wo der Zeiger steht. Habe ich die Stelle könnte ich den String nur bis zu dieser Stelle -1 auslesen und ihn in ein neues Array reinschreiben. Diesen Vorgang wiederhole ich in einer Schleife sodass nach dreidürchläufen mein Array drei Einträge hat. Die Liste zu fülle ist denke ich mal dann kein Problem mehr.
Ich habe leider nichts gefunden, wie ich in einem String nach Zeichen suchen kann und auf die Stelle wiederbekomme, bzw. wie ich dann eventuell den String abschneiden könnte.Ich hoffe mein Problem ist einigermaßen verständlich.
-
Willst du die Klasse CString benutzen?
-
schau dir mal die funktion strtok() an
-
welche Klasse ich dafür benutze ist doch egal , oder?
-
Ich weiß nicht ob dich das weiterbringt:
void DoCutString(CStringArray&arrayCutted,CString strForToCut,char cCut) { arrayCutted.RemoveAll(); if (strForToCut.IsEmpty()) return; CString strTemp = strForToCut; while (strTemp.Find(cCut) != -1){ arrayCutted.Add(strTemp.Left(strTemp.Find(cCut))); strTemp = strTemp.Mid(strTemp.Find(cCut) + 1); } arrayCutted.Add(strTemp); }
-
cru schrieb:
welche Klasse ich dafür benutze ist doch egal , oder?
naja, nicht wirklich. ich meine man kann die string ja konvertieren, aber wenn man weiß wie dein String vorliegt kann man dir die beste lösung verraten
-
@Kauz01
das sieht danach aus als ob es mich weiterbringen könnte, jedoch weiß ich nicht, wwelcher Parameter für was steht, kannst du dies vielleicht erläutern
-
@Horst
ich habe die Globale Varialbe __argv[] benutzt.
dort steht bspw. a;b;c drin.
Diese ist doch dann char*.
-
Nun ist mein Nick gesperrt, jetzt muss ich halt mal so:
Die Dinger sind ausschließlich aus der MFC. Auf das musst du aufpassen. Also deine Strings gegebenenfalls umwandeln.In das String-Array werden die einzelnen Teilstrings abgelegt. Das ist das Array, das du wolltest.
strForToCut entspricht deinem argv[1].
cCut ist das Character, das als Trenner dient. Bei dir das ";".
-
die letzten beiden Parameter sind mir klar.
Ich habe nun erstmal die Function in meiner Hauptklasse deklariert(also als Prototyp, damit ich auch auf diese zugreifen kann. danach habe ich sie in Haupt cpp per copy paste eingefügt. Per Button will ich nun auf diese zugreifen. und würde folgendes schreiben.DoCutString("??",__argv[1],";");
da wo jetzt die Fragezeichen stehen, soll das Array hin, welches ich später auslesen möchte, oder?
Also würde ich vorhewr folgendes schreiben.
char neuesArray[10]; //ich sag einfach mal es düfen nur max 10 Parameter benutzt werden
in der nächsten Zeile würde dann folgendes stehen
DoCutString(neuesArray[],__argv[1],";");das klappt leider aber nicht so ganz. Oder verstehe ich das immer noch falsch
-
mein Verständnisproblem liegt unter anderm auch in
CStringArray&arrayCutted
warum steht doch ein "&"
Das Array heißt arrayCutted und ist vom Typ CStringArray aber warum dieses &
-
So ganz sind wir noch nicht zusammen:
Für die Fragezeichen brauchst du zwingend ein CStringArray-Objekt. In das werden die einzelnen Teile reingeschrieben.
Als Trenner brauchst du einen character. Also nicht ";", sonder ';'. Schätze da hab ich dich oben aufs Glatteis geführt.
Dass du _argv[1] direkt übergibst und nicht zuvor in einen CString castest, sollte funktionieren.Was passiert (ich geb mal ein Beispiel):
CString strForToCut = "String1;String2;Aber Hallo"; CStringArray aCutted; DoCutString(aCutted,strForToCut,';');
Dann steht in
aCutted.GetAt(0) "String1"
aCutted.GetAt(1) "String2" und in
aCutted.GetAt(2) "Aber Hallo".
Länger ist das Array nicht.
-
Dieses & steht, da eine Referenz auf das CStringArray an die Funktion übergeben wird. Das in der Funktion behandelte Objekt ist also keine Kopie des übergebenen, sondern das Objekt selbst. Somit ist nach der Ausführung des Funktion das übergebene CStringArray verändert. Im Beispiel stehen die einzelnen Teile drin. Sollte das & fehlen, so übergibst du eine Kopie. Was in der Funktion damit gemacht wird hat keinerlei Auswirkungen auf das Original.
-
super vom Prinzip her ist es verstanden, danke erst mal,
jedoch meldet der Compiler immer noch nen Fehler.GSFTP2Dlg.obj : error LNK2001: Nichtaufgeloestes externes Symbol "protected: void __thiscall CGSFTP2Dlg::DoCutString(class CStringArray &,class CString,char)" (?DoCutString@CGSFTP2Dlg@@IAEXAAVCStringArray@@VCString@@D@Z)
Debug/GSFTP2.exe : fatal error LNK1120: 1 unaufgeloeste externe VerweiseDer Aufruf war folgendermaßen:
CStringArray arrayneu;
DoCutString(arrayneu,__argv[1],';');Fällt der Aufruf weg kommt keine Fehlermeldung
Also wenn du mir bei diesem Problem noch helfen könntest wäre ich echt dankbar
-
hat sich erledigt der Prototyp war in der .h und nicht in der .cpp