Namen bzw Strings in Ein variables Array speichern



  • Hallo,

    ich hab folgende Aufgabe gestellt bekommen:

    Entwickeln Sie ein Programm, das Sie erlaubt beliebig viele Namen in einem Array zu speichern. Die Namen sollen mit dieser Funktion eingegeben werden:

    char*input(char*hw)
    {
    charx;
    x=new char[4096];
    cout<<hw;
    cin>>x;
    char
    neu=new char[strlen(x)+1];
    strcpy(neu,x);
    delete[]x;
    return neu;
    }

    Mein Problem ist nun, wie bringe ich die Namen davon in ein variables Array?

    Ich wäre euch sehr dankbar wenn Ihr mit damit helfen könntet.

    Ach ja wichtig. Mein Lehrer möchte das ich das klassisch mit char arrays löse. Std::string darf nicht dazu nicht benutzen.

    Doch nur wie mach ich das klassisch, das ich 10 variable werte in ein variables Array eintrage?

    Gruß

    Hans



  • Wenn du die STL nutzen darfst, kann ich dir std::vector empfehlen.

    Wenn nicht, musst du das Array einfach dynamisch per new erzeugen.



  • Hi
    Wozu ist der hier gut:
    char* hw
    ?



  • Nun, du speicherst die Größe von deinem Array. Wenn ein neuer Name eingegeben wurde, kopierst du das Array in eine "TEMP"-Variable, vergrößerst das Array (Blockweise vergrößern empfiehlt sich hier, um ständiges Umkopieren zu vermeiden), kopierst den Inhalt des TEMP Array in das nun größere Array und fügst den neuen Namen an die nächste Position.

    Zum Umkopieren könntest du dir mal die Funktion memcpy anschauen...



  • #include <iostream>
    using namespace std;
    
    char* input()
    {
    	char* x;
    	x = new char[4096];
    	cin >> x;
    	char* neu = new char[strlen(x)+1];
    	strcpy( neu, x );
    	delete [] x;
    	return neu;
    } 
    
    int main()
    {
    	int i,n;
    
    	cout << "Wie viele Namen duerfen es sein ? " << endl;
    	cin >> i;
    
    	char**  Namen = new char* [i];
    
    	for ( n = 0; n < i; n++ )
    	{
    		cout << "Name " << n + 1 << ": " << endl;
    		Namen[n] = input();
    	}
        cout << endl;
    	for ( n = 0; n < i; n++ )
    	{
    		cout << Namen[n] << endl;
    	}
    
    	for ( n = 0; n < i; n++ )
    	{
    		delete [] Namen[n];
    	}
    
    	delete [] Namen;
    
    	return 0;
    }
    


  • Huji, was ein Code 😮 ... schnell ins ANSI-C Forum damit 😃 .



  • CodeFinder schrieb:

    Huji, was ein Code 😮 ... schnell ins ANSI-C Forum damit 😃 .

    new und delete kennt Ansi nicht 😉



  • proggingmania schrieb:

    new und delete kennt Ansi nicht 😉

    Schon klar 😉 . Bezog sich auch mehr auf die 'Verwurschtlung' bezüglich der C-Strings (Das ist jetzt aber nix gegen den Code von Pupils little Helper; so war es ja gefordert 😉 , sondern eher an die Aufgabenstellung dieses Lehrers 🕶 ).



  • hoppla ne ganze menge antworten.

    der gepostete quellcode ist schon sehr hilfreich, nur was ich nicht richtig verstehe ist:

    char** Namen = new char* [i];

    warum muss ich 2 Zeiger auf Namen legen? Würde da nicht einer auch reichen. oder wozu ist das dann gut?



  • Das sind keine zwei Zeiger, das ist ein Zeiger auf einen Zeiger - und den brauchst du, weil C-Strings selbst als "Array von char" (bzw. "Zeiger auf char") dargestellt werden.

    PS: Die C++ typische Lösung wäre es, einen vector<string> zu verwenden und dem System die ganze Speicherverwaltung zu überlassen 😉



  • Hallo,

    ach stimmt ja jetzt kapiere ich es. Ja die klassische Art Strings zu speichern sind ja Char Arrays. Und da das Array selbst auf die Char arrays der namen zeigt, braucht man einen Zeiger auf einen zeiger


Anmelden zum Antworten