einzelne Buchstaben sortieren in einem char* array



  • Hallo Leute

    Folgende Aufgabe ist mir gestellt worden:
    ich soll einen Array aus einzelnen strings erstellen. Dann sollen die einzelnen Buchstaben der Elemente alphabetisch sortiert werden.

    Folgenden Array habe ich erstellt:

    int _tmain(int argc, _TCHAR* argv[])
    {
    	char * mystrings [] = {"Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"};			
    
    	getchar();
    	return 0;
    }
    

    Fragen:
    1. Wie hole ich die die Einzelnen Elemente da raus? mystrings[n] ?
    2. Wie spreche ich die einzelnen Buchstaben an und kann sie dann vergleichen und ggf. verschieben?

    Wenn ich meinetwegen folgendes mache:
    Ich selektiere das Element 0 --> mystrings[0]
    Dann ist das der Wert : "Montag"
    Sortiert wäre der Wert: "agMnot"

    Ich habe keinen Ansatz. Hat jemand eine Idee?



  • Du hast doch einen Ansatz und der ist auch schon gut.
    Wie in deiner 1. Frage so kannst du auf die einzelnen Zeichenketten zugreifen. Mit mystring[n][m] ist m der Index für die einzelnen Zeichen der Zeichenkette n. m solltest du dir mit strlen o.ä. ermitteln.
    Zum sortieren solltest du dir Algotithemn wie Bubblesort ansehen. Es gibt wahrscheinlich auch schon Funktionen dafür.



  • Ist es nicht vlt. noch sinnvoll nach den einzelnen Strings ein Trennzeichen einzufügen?
    z.B.
    {"Montag\0","Dienstag\0","Mittwoch\0","Donnerstag\0","Freitag\0","Samstag\0","Sonntag\0"};

    zur Ermittlung der einzelnen Stringlängen und zum auseinanderhalten der einzelnen Strings in diesem Array ist dies bestimmt hilfreich.



  • Die Zeichenketten müssen ja nicht auseinander gehalten werden, da es sich ja eben gerade um ein Array von Zeichenketten handelt.
    Wenn das Array so wie im code von psd-sign initialisiert wird, steht hinter jeder Zeichenkette automatisch ein \0.



  • Ich Glaub, ich habe mich falsch ausgedrückt.

    Ich kenn die verschiedenen Sortierverfahren aus anderen Programmiersprachen bereits. Ich habe kein Algorithmus Problem, sondern wahrscheinlich ein einfaches SYNTAX Problem:
    Wie Greife ich auf die einzelnen Elemente meines dynamisch erstelltet String-Arrays zu? Wie würde es aussehen, wenn ich das Element 0 (Montag) in einen anderen String kopieren möchte, damit der verändert wird ...

    KONKRET: Wie bekomme ich das Element 0 aus char * mystrings [] in einen anderen char? Und wie spreche ich dann Buchstabe 0-n in diesem Char an?



  • Das sind Zeiger! Wnen Du die daten woanders haben willst musst Du sie z.B. kopieren.

    char * mystrings [] = {"Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag","Sonntag"};            
    char szTag[20];
    strcpy(szTag,myStrings[0]); // Kopiere Montag
    


  • Okay

    myStrings[0] == der Zeiger auf das Element 0 ("Montag")

    Wie ist der Zeiger auf Element 0 von Element 0?
    Anders: myStrings[0] = "Montag" --> Wie zeige ich in dem Array auf das "M" von Montag?



  • Indem Du noch mal den Index operator oder den Zeiger operator benutzt.

    char cMfromMonday1 = myStrings[0][0];
    char cMfromMonday2 = *myStrings[0];
    


  • Hmm , Okay.

    char cMfromMonday1 = myStrings[n][m];
    

    Ist mir klar. In meinem Array myStrings greife ich auf das Zeichen m im Element n zu. Oder?

    Aber:

    char cMfromMonday2 = * myStrings[n];??
    

    Was bewirkt der Stern?

    Ach ja: Mal zwischendurch ein Danke, dass ihr euch die Zeit nehmt. 👍



  • Ich glaube, du solltest dich mal mit Zeigern beschäftigen.

    Durch den "Stern" ("Dereferenzierungsoperator") erhält man den Wert, der sich hinter der Adresse verbirgt, auf die der Zeiger zeigt.
    D.h. damit kriegst du den Wert, der an Stelle n steht. Du musst es so machen, da myStrings eben ein Zeiger ist (wenn ich den Thread hier jetzt richtig verfolgt habe).

    In meinem Array myStrings greife ich auf das Zeichen m im Element n zu. Oder?

    Damit erhälst du den Wert, der an Stelle m, n im Array steht.

    Bsp.:

    char szChar = EinMehrDimArray[1][2];
    

    Da erhälst du den Wert, der in Zeile 1 Spalte 2 steht.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Naja, sieht eher aus wie C als C++. Nimm doch einfach std::string und std::vector, wenn du dich in C++ bewegst.


Anmelden zum Antworten