Vergleichen von Strings



  • Servus,

    ich möchte die zwei characterStrings

    album[7][1]
    

    und

    search
    

    miteinander vergleichen, eine Zeichenkette ist also in einem dreidimensionalem, die andere in einem eindimensionalen CharArray gespeichert. So wie ich das gemacht habe, funktioniert es nicht. Kann mir jemand erklären warum? Bzw. sagen wie es funktioniert? (ohne Bibliotheksfunktionen)

    Danke im voraus!

    Das Programm gibt bei zwei gleichen Eingaben, das falsche aus 😞

    #include <iostream>
    using namespace std;
    
    char album[255][3][255];
    void init(){
    	for(int i=0; i<255; i++){
    		for(int j=0; j<3; j++){
    			for(int k=0; k<255;k++)
    				album[i][j][k]='\0';
    		}
    	}
    }
    int main(){
    	init();
    	cin>>album[7][1]; //Eingabe: abc
    	char search[255];
    	for(int i=0; i<255; i++)
    		search[i]='\0';
    	cin>>search;     //Eingabe: abc
    	if(album[7][1]==search)
    		cout<<"funzt"<<endl;
    	else
    		cout<<"funzt nicht";  //AUSGABE
    
    	return 0;
    }
    


  • Du versuchst operator == mit zwei char Arrays zu verwenden.
    Nu gibt es in C++ aber keinen operator == für Arrays.
    Dafür gibt es impliziten "array to pointer decay" und dann operator == für Zeiger.
    Heisst: du vergleichst die Adressen der beiden ersten Elemente der Arrays.
    Und die sind natürlich nicht gleich, sind ja unterschiedliche Arrays, auch wenn zufällig das selbe drinsteht.

    Zum Thema "wie macht man es dann (ohne Bibliotheksfunktionen)" nur ein kleiner Tip: du wirst ne Schleife brauchen.



  • Ok vielen Dank! Dacht mir schon, dass ich mir die Schleife nicht ersparen kann. 😉


  • Mod

    char album[255][3][255];
    void init(){
        for(int i=0; i<255; i++){
            for(int j=0; j<3; j++){
                for(int k=0; k<255;k++)
                    album[i][j][k]='\0';
            }
        }
    }
    

    Was spricht hier gegen

    class Album
    {
      string title;
      string artist;
      string was_immer_der_dritte_string_bei_dir_sein_soll;
    };
    
    vector<Album> albums;
    

    ?

    Das würde sofort alle deine Probleme lösen und würde zu einfacherem Code führen, der zudem noch weniger Beschränkungen hat.

    edit: Ach, du willst es ohne Bibliotheksfunktionen. Mittelfristig wär's dann aber wohl das Beste, vector und string nach zu programmieren.



  • Abgesehen davon, ob das ausser cin und cout C++ ist.

    (char) arrays mit mehr als 2 Dimensionen sind grundsätzlich erst mal keine sooo gute Idee. Ausser du hast es richtig drauf.

    Kommt dann sowas wie

    ***album
    

    raus.
    Eher unübersichtlich würde ich sagen.


Anmelden zum Antworten