elemente in mehrdim.array tauschen



  • Du machst es dir umständlich dadurch, dass du nicht die Klasse std::string nutzt ... (dann wäre std::swap für ein einfaches tauschen der Inhalte ausreichend ...)
    Weiß nicht ob es ausreicht einfach die Zeiger umzubiegen ... sonst kopier einfach:

    void swap_cstring(char*& first, char*& second)
    {
        char* tmp(new char[std::strlen(first) + 1]); // copy first to tmp
        std::strcpy(tmp, first);
        delete [] first; // copy second to first
        first = new char[std::strlen(second) + 1]);
        std::strcpy(first, second);
        delete [] second; // set tmp to second
        second = tmp;
    }
    

    .

    char* array[2] = {"string_01", "string_02" };
    std::cout << "#01: " << array[0] << "\n#02: " << array[1] << std::endl;
    swap_cstring(array[0], array[1]);
    std::cout << "#01: " << array[0] << "\n#02: " << array[1] << std::endl;
    

    ...



  • danke für die hilfe bisher.

    @smilingman: ja leider muss es ein array sein 😞

    @(D)Evil: okay ich glaube das kommt hin, werd es heut mal ausprobieren



  • paddel schrieb:

    ...
    also ich habe ein zweidimensionales char array mit unterschiedlichen zeichenketten

    Bsp.:

    mein_array[0]="abc";
    mein_array[1]="accba";
    mein_array[3]="accb";
    mein_array[4]="abcabcabc";

    mein ziel ist es die ketten zu sortieren mittels bubblesort ...

    Man kann z.B. schreiben :

    char mein_array[4] = {"abc", "accba", "accb", "abcabcabc"};
    

    Das ergibt ein eindimensionales Array aus Zeigern auf nullterminierte Zeichenketten verschiedenener Länge.
    Man kann nach alphanumerischem Vergleich diese Zeiger sortieren.

    mfg



  • Glaubst du daran, dass das geht?



  • Sorry

    char* mein_array[4] = {"abc", "accba", "accb", "abcabcabc"};
    

    🕶



  • (D)Evil schrieb:

    Glaubst du daran, dass das geht?

    @(D)evil
    char array[2] = {"string_01", "string_02" };**
    das geht mit Sicherheit nicht!
    😉



  • (D)Evil schrieb:

    sonst kopier einfach:

    void swap_cstring(char*& first, char*& second)
    {
        char* tmp(new char[std::strlen(first) + 1]); // copy first to tmp
        std::strcpy(tmp, first);
        delete [] first; // copy second to first
        first = new char[std::strlen(second) + 1]);
        std::strcpy(first, second);
        delete [] second; // set tmp to second
        second = tmp;
    }
    

    .

    char** array[2] = {"string_01", "string_02" };
    std::cout << "#01: " << array[0] << "\n#02: " << array[1] << std::endl;
    swap_cstring(array[0], array[1]);
    std::cout << "#01: " << array[0] << "\n#02: " << array[1] << std::endl;
    

    ...

    habe das grad mal so übernommen, funktioniert aber nicht so ganz:

    Fehler	3	error C2440: 'Initialisierung': 'const char [10]' kann nicht in 'char **' konvertiert werden	c:\dokumente und einstellungen\*****\array.cpp	21
    Fehler	4	error C2440: 'Initialisierung': 'const char [10]' kann nicht in 'char **' konvertiert werden	c:\dokumente und einstellungen\*****\array.cpp	21	
    Fehler	5
    error C2664: 'swap_cstring': Konvertierung des Parameters 1 von 'char **' in 'char *&' nicht möglich	c:\dokumente und einstellungen\*****\array.cpp	23
    


  • Jap sorry stimmt. Eine Dimension außer acht gelassen ...



  • paddel schrieb:

    ... mein ziel ist es die ketten zu sortieren mittels bubblesort ...

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    
    void bubble(char** , int); 
    
    int main()
    {
       char* mein_array[4] = {"abc", "accba", "accb", "abcabcabc"};
    
       int N = sizeof(mein_array)/sizeof(char*);
    
       bubble(mein_array, N);
    
       for(int i = 0; i < N; i++)
       {
    	   std::cout << mein_array[i] << std::endl;
       }
    
    }
    
    void bubble(char** array, int elemente) 
    {
       char* temp;
       while(elemente--)
          for(int i = 1; i <= elemente; i++)
             if(strcmp(array[i-1], array[i]) > 0)   // < 0  ==absteigend sortieren 
    		 {
                temp = array[i];
                array[i] = array[i-1];
                array[i-1] = temp;
             }
    }
    

    💡
    mfg



  • dankeschön

    eine frage noch,
    und zwar wird die anzahl der zeichenketten (VAR_ANZ) sowie deren MAX_LAENGE erst während der laufzeit festgelegt.

    ist es richtig wenn ich das array so definiere:

    char **mein_array = new char[VAR_ANZ][MAX_LAENGE];
    

    und wie übergebe ich dann dieses dynamische zweidimensionale array an die funktion bubble(); ?



  • paddel schrieb:

    dankeschön

    eine frage noch,
    und zwar wird die anzahl der zeichenketten (VAR_ANZ) sowie deren MAX_LAENGE erst während der laufzeit festgelegt.

    ist es richtig wenn ich das array so definiere:

    char **mein_array = new char[VAR_ANZ][MAX_LAENGE];
    

    und wie übergebe ich dann dieses dynamische zweidimensionale array an die funktion bubble(); ?

    void bubble(char** , int); 
    
    int main()
    {
    
       int VAR_ANZ = 4;
       int MAX_LAENGE = 10;
    
       char**  mein_array   = new char*[VAR_ANZ];
       for (int	i = 0; i < VAR_ANZ; i++)
    	   mein_array[i] = new char[MAX_LAENGE];
    
       //z.B.:
       mein_array[0] = "abca";
       mein_array[2] = "abcc"; 
       strcpy(mein_array[1], "abc");
       strcpy(mein_array[3], mein_array[2]);
    
       bubble(mein_array, VAR_ANZ);
    
       for(int i = 0; i < VAR_ANZ; i++)
       {
    	   std::cout << mein_array[i] << std::endl;
       }
    }  
    
    void bubble(char** array, int elemente) 
    {
       char* temp;
       while(elemente--)
          for(int i = 1; i <= elemente; i++)
             if(strcmp(array[i-1], array[i]) > 0)   // < 0  ==absteigend sortieren 
    		 {
                temp = array[i];
                array[i] = array[i-1];
                array[i-1] = temp;
             }
    }
    

    mfg


Anmelden zum Antworten