Zeichenkettenfeld



  • Wie würdet ihr ein Zeichenkettenfeld erstellen?
    Ist dieser Coder sauber?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main()
    {
    	char **pStringArray = new char*[3];
    
    	for (int i = 0; i < 3; i++)
    	{
    		pStringArray[i] = new char[25];
    	}
    
    	strcpy(pStringArray[0], "Hallo");
    	strcpy(pStringArray[1], "Welt");
    	strcpy(pStringArray[2], "!");
    
    	for (int i = 0; i < 3; i++)
    	{
    		printf("pStringArray[%i]: %s\n", i, pStringArray[i]);
    	}
    
    	for (int i = 0; i < 3; i++)
    	{
    	    delete []pStringArray[i];
    	    pStringArray[i] = 0;
    	}
    
    	delete []pStringArray;
    	pStringArray = 0;
    
    	system("pause");
    	return 0;
    }
    


  • Hi,

    also wenn es c++ sein soll, dann sollte es auch c++ sein!

    Deshalb würde ich es so machen:

    #include <string>
    #include <vector>
    #include <iostream>
    
    typedef std::vector< std::string > StringArray;
    
    void MakeStringArray()
    {
    	StringArray StrArr;
    
    	StrArr.push_back( "Erster String" );
    	StrArr.push_back( "Zweiter String" );
    	StrArr.push_back( "Dritter String" );
    	StrArr.push_back( "Vierter String" );
    
    	for ( size_t i = 0; i < StrArr.size(); ++i )
    		std::cout << StrArr[i] << std::endl;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	MakeStringArray();
    
    	return 0;
    }
    

    Gruss
    EarlyBird



  • Hi!

    @Xa1Ro:
    Ich würde auch die Methode von EarlyBird bevorzugen oder ein string-Array nehmen, also 'std::string myString[3];'. Und wenn du nicht unbedingt dynamische Speicherreservierung benötigst, könntest du es auch direkt initialisieren:
    char welt[3][25] = {"Hallo", "Welt", "!"};
    Letzendlich ist wohl aber die Version mit dem Vektor die einzigst sinnige Methode. Auch dort kannst du angeben wieviele Strings du willst:
    std::vector < std::string > welt(3);

    Code-Hacker



  • Xa1ro schrieb:

    Ist dieser Coder sauber?

    Wieso nicht? Die meisten std::vectorstd::string Implementationen werden auch nix anderes machen, nur netter verpackt.



  • Danke!

    @groovemaster: Ich meinte ob mein Code sauber ist. Ich habe halt immer noch diesen C-Style drin. 😉



  • Asoo, ich dachte du hast einen Fremdcode und wolltest wissen, ob der Coder bekloppt ist. 😃

    Naja, C++ ist der Code trotzdem nicht, vielmehr C+. In C++ greift man auf entsprechende Container zurück, wie zB std::vector und std::string. Das erspart einem auch die str... Funktionen, die langsamer arbeiten als es notwendig ist.


Anmelden zum Antworten