Probleme bei function overloading



  • Danke!
    Ich hab mich hingesetzt und gegrübelt und das ist rausgekommen:

    int find(const int* feld, int wert, int size) {
      for(int index =0; index < size; ++index) {
        if(feld[index] == wert) {
          return index;
        }
      }
      return -1;
    }
    
    int find(char* feld[], char wert[], int size) {
      for(int index =0; index < size ; ++index) {
        if(feld[index] == wert) {
          return index;
        }
      }
      return -1;
    }
    

    Blos die Funktion für das char Feld funktioniert nicht. Ich komm nicht drauf warum. kann mir da jemand helfen



  • Janine schrieb:

    Blos die Funktion für das char Feld funktioniert nicht. Ich komm nicht drauf warum. kann mir da jemand helfen

    Du vergleichst in deiner Funktion nur Pointer. Verwende strcmp().
    Kurt



  • Die Rede war am Anfang von Prozeduren,also vergesst das mal ganz schnell mit

    int find
    

    Prozedur fängt mit void an und hat keinen Rückgabewert! Sähe dann so aus.

    void find(const int* feld, int wert, int size,int anzahl) {
      for(int index =0; index < size; ++index)
        {
        if(feld[index] == wert)  {
          cout<<"\nIndex der Zahl ist: " <<index ;
          cout<<"\nAnzahl der Zahl ist: "<<anzahl<<endl<<endl; return ;
         }
       }
      cout<< "\nIndex der Zahl ist: -1";
    }
    

    Für Feld von Zeichenketten weis ich au net so recht



  • Ich krieg das nicht hin mit dem String Feld. Kann mir jemand helfen bitte



  • Wie gesagt verwende strcmp()

    int find(char* feld[], char wert[], int size) { 
      for(int index =0; index < size ; ++index) { 
        if( strcmp(feld[index], wert) == 0 ) { 
          return index; 
        } 
      } 
      return -1; 
    }
    

    Kurt



  • Hast du die strcmp mal angeschaut?
    Ansonsten ersetze

    if(feld[index] == wert)
    

    in deiner Funktion mal durch

    if(strcmp(feld[index],wert) == 0)
    

    [edit]Zu spät.[edit]



  • Und da du ja noch neu bist und die Sache vielleicht nicht
    richtig beurteilen kannst, gib ich dir noch den Tip
    Nightmare's Post zu ignorieren.

    Nur weil irdendwo das Wort 'Prozedur' gefallen ist, muss man ja
    jetzt keinen unsinnigen Code schreiben.

    Jockel



  • Er ist wahrscheinlich von Pascal hierher gewechselt. 😉



  • Danke ihr habt mir sehr geholfen. Es gibt nur ein kleines Problem bei der Funktion. Wenn zwei gleiche Zahlen vorkommen gibt er nur den Index der ersten aus und nicht alle. Ich hatte versucht das Feld mit einer for-Schleife von hinten noch durchlaufen zu lassen aber das funktioniert nicht. Hat einer von euch eine Idee?



  • vielleicht ain array für die positionen anlegen!

    Also wenn er eins findet, nicht gleich die position ausgeben, sondern diese in einem array speichern, und weitersuchen lassen, und wenn er noch eine findet, dann auch im array speichern!

    Am ende dann das array ausgeben.

    Hmm...weis nur nicht,wie weit du das jetzt verstehst oder umsetzen kannst!



  • theoretisch versteh ichs. aber wie ich das umsetz weis ich nich recht



  • Janine schrieb:

    Es gibt nur ein kleines Problem bei der Funktion. Wenn zwei gleiche Zahlen vorkommen gibt er nur den Index der ersten aus und nicht alle.

    Ist das wirklich ein Problem im Sinne der Aufgabenstellung? Die Vorgabe war doch, den Index (Einzahl) zurückzugeben.



  • aber im int-Feld kommt die Zahl "2" zweimal vor. wenn ich die z.B. suche gibt er mir nur den Index der ersten. Wie müsste sie aussehen wenn ich egal wieviel gleiche Zahlen hab und deren Indices ausgeben lassen will.



  • also ich hab mal eins gebastelt (nicht in der ide, weil ich hier keine habe. ES KANN ALSO SEIN, DAS EINIGES FEHLT ODER FEHLERHAFT IST)

    int* find(int* array,int size,int number,int &found)
    {
     int *returnit;
     for(int i=0;i<size;i++)
     {
      if(array[i]==number)
      {
       returnit[found]=i;
       found++;
      }
      else{}
     }
     return returnit;
    }
    
    int main(int argc, char* argv[])
    {
     int test[5];
     int found=0;
     test[0]=1;
     test[1]=2;
     test[2]=3;
     test[3]=2;
     test[4]=2;
    
     int *result=find(test,5,2,found);
     for(int i=0;i<found;i++)
      cout<<result[i]<<endl;
     getch();
            return 0;
    }
    

    Das soll nur zeigen, wie ich es gemeint habe!



  • Vielleicht solltest du für returnit auch mal Speicher vereinbaren. Und was soll dieser else Zweig?



  • Braunstein schrieb:

    Vielleicht solltest du für returnit auch mal Speicher vereinbaren. Und was soll dieser else Zweig?

    yupp hast recht, wie gesagt, ich hab hier nix zum programmieren!
    War nur so ausm gedanken!

    Wobei ich ehrlich sein muss, das ich das mit dem if-abfackeln irgendwie immer mach 🙄



  • vector anstelle eines int* wäre hier besser.
    Ich stimme aber MFK zu, dass in der ursprünglichen Aufgabenstellung nichts davon steht alle Indizes zu finden.



  • Braunstein schrieb:

    vector anstelle eines int* wäre hier besser.
    Ich stimme aber MFK zu, dass in der ursprünglichen Aufgabenstellung nichts davon steht alle Indizes zu finden.

    yup wieder recht!

    Nur da ich gesehen habe, wie weit der threadsteller sich mit c++ auskennt, dachte ich nciht, das schon STL oder so jemals gehört wurde...!
    Darum habe ich int* genommen!


Anmelden zum Antworten