String sortieren



  • 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



  • Wie wärs mal mit cpp-Tags? So beim überfliegen wüsst ich nicht woher first und last herkommen sollten.



  • Und außerdem sind die set_first() und set_last() Methoden eine mittlere Katastrophe:

    void set_first(char*first) 
    { 
      cout<<"\nVorname eingeben" ;
      cin>>vorname;
      laenge1=strlen(vorname); 
      for(int i=0;i<laenge1;i++) 
        cout<<" "<<vorname[i];              //bis hierhin womöglich noch braucbar
      *ptrvorname=vorname[i];               //schreibt den Null-Terminator von Vorname irgendwohin (ptrvorname ist nicht initialisiert)
      ptrvorname=new char[strlen(first)+1]; //legt ein neues Array an (kein delete > mögliches Speicherleck
      strcpy(vorname,first);                //füllt das Array mit Daten (woher kommen die?)
    }
    

    Und du solltest dich einigen, ob die Methoden den Namen selber einlesen oder als Parameter übernehmen - beides kombiniert macht idR wenig Sinn.


Anmelden zum Antworten