string in Funktion übergeben



  • Hallo,

    ich habe ein Programm geschrieben und finde den Fehler nicht. Ich habe alle Fehler beseitigt aber es bricht immer an der gleichen Stelle ab. Ich weiß leider überhaupt nicht worann es liegen kann.

    #include <iostream>
    #include <string>
    #include <windows.h>
    
    using namespace std;
    
    void einlesen(string[],int);
    string sortieren(string[], int);
    void ausgabe(string[], int);
    
    void main()
    {
    	string *vorname, *sortiert;
    	int n = 0;
    	int i = 0;
    
    	cout << "Wie viele Namen werden eingelesen?";
    	cin >> n;
    
    	vorname = new string[n];
    	sortiert = new string[n];
    
    	einlesen(vorname, n);
    	sortiert[n] = sortieren(vorname, n);
    	ausgabe(sortiert, n);
    
    	system("Pause");
    }
    
    void einlesen(string vorname[], int n)
    {
    	system("cls");
    	for(int i = 0; i < n; i++)
    	{
    		cout << i + 1 << ".ter Vorname: ";
    		cin >> vorname[i];
    		cout << endl;
    	}
    }
    
    string sortieren(string vorname[], int n)
    {
    	int i = 0, j = 0;
    	string merker;
    
    	system("cls");
    	for(i = 0; i < n; i++)
    	{
    		for(j = 0; j < n - 1; j++)
    		{
    			if(vorname[j] > vorname[j+1])
    			{
    				merker = vorname[j];
    				vorname[j] = vorname[j + 1];
    				vorname[j + 1] = merker;
    			}
    		}
    	}
    	return vorname[n];
    }		
    
    void ausgabe(string vorname[], int n)
    {
    	system("cls");
    	cout << "Jetzt erfolgt die sortierte Ausgabe der Namen";
    	cout << endl;
    
    	for(int i = 0; i < n; i++)
    	{
    		cout << i + 1 << ".ter Vorname: " << vorname[i];
    		cout << "\n";
    	}
    }
    

    Es hat mir Sicherheit etwas mit string zu tuhen, kenne mich da aber leider noch sehr wenig aus.

    Was soll das Programm machen? Das Programm soll Namen einlesen und diese dann sortiert wieder ausgeben.

    Ich vermute die Fehler in der sortieren-Funktion, bzw. im Aufruf dieser. Hoffe Ihr wisst was damit anzufangen.

    f. G.



  • schmeiß das new zeug raus, du benutzt strings, die sind vom haus aus dynamisch, du brauchst strings nicht wie alte char array benutzen die due je nach größe neu allozieren musst



  • Firefighter schrieb:

    schmeiß das new zeug raus, du benutzt strings, die sind vom haus aus dynamisch, du brauchst strings nicht wie alte char array benutzen die due je nach größe neu allozieren musst

    Er will aber mehrere Strings verwalten...

    Anstatt mit string* und new zu arbeiten, solltest Du vielleicht vector<string> benutzen.



  • ja er kann ja mit mehreren strings arbeiten, dafür braucht er doch aber nicht mit new arbeiten, deine variante mit vector<string> empfinde ich auch als die einzigste beste.



  • Danke erstmal,

    wir _müssen_ *variable, new etc. benutzen (Schule), kann es also nicht rausschmeißen oder es durch Vektoren ersetzen.



  • Lionhead schrieb:

    Danke erstmal,

    wir _müssen_ *variable, new etc. benutzen (Schule), kann es also nicht rausschmeißen oder es durch Vektoren ersetzen.

    Dann musst Du sowohl den Puffer für den sortierten als auch für den unsortieten Speicher an die Funktion übergeben:

    //Deklaration
    void sortieren(string* unsortiert, string* sortiert, size_t length);
    
    //Definition
    void sortieren(string* unsortiert, string* sortiert, size_t length)
    {
        size_t i = 0, j = 0;
        string merker;
    
        //...kopieren
        for( i = 0; i < length; ++ i )
        {
            sortiert[i] = unsortiert[i];
        }
    
        //...und sortieren
        for(i = 0; i < length; i++)
        {
            for(j = 0; j < length - 1; j++)
            {
                if(sortiert[j] > sortiert[j+1])
                {
                    merker = sortiert[j];
                    sortiert[j] = sortiert[j + 1];
                    sortiert[j + 1] = merker;
                }
            }
        }
    }
    


  • Lionhead schrieb:

    Wir _müssen_ *variable, new etc. benutzen (Schule), kann es also nicht rausschmeißen oder es durch Vektoren ersetzen.

    *sigh* 🙄



  • Was genau ist den jetzt size_t?



  • http://www.cplusplus.com/reference/clibrary/cstring/size_t.html

    ...
    and is defined in the <cstring> header file (among others) as an unsigned integral type.
    ...


Anmelden zum Antworten