String sortieren



  • Wie kann ich eine Funktion für String zum sortieren schreiben?
    Beispiel, Meine Funktion soll die Monatname im Alphabetische Reihe ausgeben.
    Vielen Dank!



  • wenn du es schreiben willst dann lies deinen string jedesmal bis zu einem " " ein. und mach teilstrings, diese sortierst du halt durch ...



  • afokam schrieb:

    Wie kann ich eine Funktion für String zum sortieren schreiben?
    Beispiel, Meine Funktion soll die Monatname im Alphabetische Reihe ausgeben.
    Vielen Dank!

    Am besten gar nicht. Mach dich besser mit der Standardbibliothek vertraut:

    #include <algorithm>
    
    // ...
    
    string monate[] = { /* ... */ };
    std::sort(monate, monate+12);
    


  • Es klingt schon gut für mich !

    danke. Aber ich will es mit pointer und Zeiger schreiben.
    können sie mir weiter helfen?



  • afokam schrieb:

    danke. Aber ich will es mit pointer und Zeiger schreiben.

    Pointer UND Zeiger - den muß ich mir merken 😃

    können sie mir weiter helfen?

    Klar, aber dann mußt du natürlich eine eigene Vergleichsfunktion auf strcmp()-Basis bauen und an sort() mitgeben (die Default-Version vergleicht per "kleiner als" - und das ist für "pointer und Zeiger" nicht der lexikalische Vergleich.



  • Ich weißt nicht was hier falsch ist

    Ich brauche hilfe

    #include<iostream>
    #include<string.h>
    using namespace std;

    //char*month_name(char *n)
    int main()

    {
    static char *name[]={"illegal month",
    "january",
    "February",
    "march",
    "April",
    "May",
    "june",
    "july",
    "August",
    "september",
    "Oktber",
    "november",
    "December"

    };
    int i;char *ptrname;
    {

    for(i=0;i<=12;i++)

    //cout<<"name["<<i<<"]="<<name[i]<<'\n';
    ptrname=strchr(name[i],"April");
    while (ptrname!=NULL)
    {
    printf ("found at %d\n",name[i]);
    //ptrname=strchr(ptrname+1,'April');

    }
    return 0;

    }
    }

    Das ziel ist die Monaten in alphabetischen Reihe zu ordnen.



  • Ohne jetzt den Fehler in deinem Programm zu suchen: musst du das unter Vorgab so schreiben, oder kannst du beliebige Methoden verwenden? Wenn ja, nutze std::string statt char* und std::sort zum sortieren des arrays (das du auch durch nen vector ersetzen kannst wenn gewollt



  • Ich muß zwar nicht schreiben. Aber ich kenne mich von deinem Vorschlag nicht aus.Können sie mir mehr helfen?



  • Siehe DEvils Post hier drunter, der ist besser.

    Bez der einzelnen Sachen wie string, set oder vector empfehele ich www.cppreference.com sowie einige Online Tutorials.



  • Irgendwie stimmt die Schreibweise der Funktion nicht.
    Ich kenne mich nicht aus

    Danke!



  • Nja ... nen vector wenn die Größe statisch ist?

    #include <iostream>
    #include <string>
    #include <algorithm>
    
    int main()
    {
    	const std::size_t month_count = 13;
    	std::string arr_month[month_count]={"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember", "Unknown"};
    
    	for (std::size_t month = 0; month < month_count; ++month)
    		std::cout << arr_month[month] << std::endl;;
    
    	std::cout << "Sort array!" << std::endl;
    	std::sort(arr_month, arr_month + month_count);
    	std::cout << "Array sorted!" << std::endl;
    
    	for (std::size_t month = 0; month < month_count; ++month)
    		std::cout << arr_month[month] << std::endl;
    }
    

    aja und bei dir ist außerdem falsch das dein array const ist ... das kann ja schlecht gehen. 🙄

    #include <iostream>
    #include <string>
    #include <algorithm>
    #include <vector>
    
    int main()
    {
    	std::vector<std::string> arr_month;
    	arr_month.push_back("Januar");
    	arr_month.push_back("Februar");
    	arr_month.push_back("März");
    	arr_month.push_back("April");
    	arr_month.push_back("Mai");
    	arr_month.push_back("Juni");
    	arr_month.push_back("Juli");
    	arr_month.push_back("August");
    	arr_month.push_back("September");
    	arr_month.push_back("Oktober");
    	arr_month.push_back("November");
    	arr_month.push_back("Dezember");
    	arr_month.push_back("Unknown"};
    
    	for (std::vector<std::string>::iterator it = arr_month.begin(); it != arr_month.end(); ++it)
    		std::cout << (*it) << std::endl;;
    
    	std::cout << "Sort array!" << std::endl;
    	std::sort(arr_month.begin(), arr_month.end());
    	std::cout << "Array sorted!" << std::endl;
    
    	for (std::vector<std::string>::iterator it = arr_month.begin(); it != arr_month.end(); ++it)
    		std::cout << (*it) << std::endl;;
    }
    

    wenn de unbedingt std::vector haben willst ...



  • Stimmt, ich arbeite einfach nicht oft genug mit Arrays (oder besser gesagt sizeof) Funktionniert es so? Ich kannes leider atm nicht testen, da ich nichts kompilieren kann.

    EDIT: @DEvil: Sry, ist echt ein bisschen over kill. Das const array ist btw ja nur zum vector füllen gedacht gewesen resp. damit man es danach noch hat, falls man es nochmal braucht.
    Sry.



  • afokam schrieb:

    Ich muß zwar nicht schreiben.

    Dann verwende die Methode von finix, ganz am Anfang des Threads. Wozu willst Du denn hier Zeiger verwenden?



  • Wir haben die Antwort!

    ompilierung läuft...
    main.cpp
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(76) : error C2374: 'it' : Neudefinition; Mehrfachinitialisierung
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(69) : Siehe Deklaration von 'it'
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(78) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
    Fehler beim Ausführen von cl.exe.

    main.obj - 1 Fehler, 1 Warnung(en)

    kannst du noch was? 🙂



  • dieser Beitrag :

    #include <iostream>
    #include <string>
    #include <algorithm>

    int main()
    {
    const std::size_t month_count = 13;
    std::string arr_month[month_count]={"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember", "Unknown"};

    for (std::size_t month = 0; month < month_count; ++month)
    std::cout << arr_month[month] << std::endl;;

    std::cout << "Sort array!" << std::endl;
    std::sort(arr_month, arr_month + month_count);
    std::cout << "Array sorted!" << std::endl;

    for (std::size_t month = 0; month < month_count; ++month)
    std::cout << arr_month[month] << std::endl;
    }

    liefert mir folgende ergebniss

    ompilierung läuft...
    main.cpp
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(34) : error C2039: 'size_t' : Ist kein Element von 'std'
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(37) : error C2039: 'size_t' : Ist kein Element von 'std'
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(44) : error C2039: 'size_t' : Ist kein Element von 'std'
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(44) : error C2374: 'month' : Neudefinition; Mehrfachinitialisierung
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(37) : Siehe Deklaration von 'month'
    C:\Dokumente und Einstellungen\All Users\Desktop\Auf5\main.cpp(46) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
    Fehler beim Ausführen von cl.exe.

    main.obj - 4 Fehler, 1 Warnung(en)

    ich habe aber keine Idée 😮



  • Welcher Compiler ist das? Visual C++ 6.0?



  • es ist 6.0



  • Hmm dann pack Visual C++ 6.0 mal direkt in den Mülleimer und hol dir Visual C++ 2005 Express Edition. Der ist kostenlos und aktuell. Mein Code ist für gewöhnlich korrekt.



  • danke!
    mache ich! 😕 😕



  • Hi!

    Wer sagt mir wo meinen Fehler Liegt?

    #include<iostream>
    #include<string>
    using namespace std;

    class Name
    {
    private:
    char vorname[20];
    char *ptrvorname;
    char nachname[20];
    char ptrnachname;
    int laenge1,laenge2;
    public:
    void set_first(char
    first)
    {
    cout<<"\nVorname eingeben" ;
    cin>>vorname;
    laenge1=strlen(vorname);
    for(int i=0;i<laenge1;i++)
    cout<<" "<<vorname[i];
    ptrvorname=vorname[i];
    ptrvorname=new char[strlen(first)+1];
    strcpy(vorname,first);
    }
    void set_last(char
    last)
    {
    cout<<"\nNachname eingeben :";
    cin>>nachname;
    laenge2=strlen(nachname);
    for(int i=0;i<laenge2;i++)
    cout<<" "<<nachname[i];
    *ptrnachname=nachname[i];
    ptrnachname=new char[strlen(last)+1];
    strcpy(nachname,last);
    }
    char *geht_first(void)
    {
    return vorname;
    }

    char *get_last(void)
    {
    return nachname;
    }

    //int check();
    };

    int main()
    {
    Name Student;
    Student.set_first(*first);
    Student.set_last(*last);
    }

    Dass problem liegt schon bei meine Main funktion.

    Ich will dieses Programm testen! :p


Anmelden zum Antworten