Konvertierung von char* nach char nicht möglich



  • Ne kleine Frage wir haben gerade pointer durchgenommen, und sollen jetz eine Aufgabe lösen. Es werden 10 namen eingegeben, per bubble sort sotiert. Im bubblesort sollen wir in ne funktion und dan die sachen vertauschen. Genau bei der Funktion bringt er mir den Fehler, den ihr im Titel seht.

    #include <iostream.h>
    #include <iomanip.h>
    #include <conio.h>
    
    void tausche(char &,char  &);
    
    int main()
    {
    //Aufgabe 2: Dreieckstausch (1. Teil Anfang)
    
    char Name[10][20];
    clrscr();
    for (int i=0;i<20;i++)
    {
    cin >> Name[i];
    }
    
    for (int i=19;i>0;i--)
                   {
                   for (int o=0;o<i;o++)
                            {
                            if (strcmp(Name[o],Name[o+1])>0)
                               {
                               tausche(Name[o],Name[o+1]);
                               }
                            }
                   }
    
    for (int i=0;i<20;i++)
    {
    cout << Name[i];
    }
    getchar();
    //Aufgabe 2: Dreieckstausch (1. Teil Ende)
    }
    
    //Aufgabe 2: Funktion Dreieckstausch (2. Teil Anfang)
    void tausche(char &zahl1,char &zahl2)
    {
    char hilf[20];
    strcpy(hilf,zahl2);
    strcpy(zahl2,zahl1);
    strcpy(zahl1,hilf);
    }
    //Aufgabe 2: Funktion Dreieckstausch (2. Teil Ende)
    


  • void tausche(char*& zahl1,char*& zahl2) 
    {}
    


  • Danke geht allerdings habe ich jetzt das nächste Problem.

    Und zwar haben wir später im quellcode binäre suche:

    //Aufgabe 3: Binäres Suchen
    char suche[20];
    clrscr();
    cout << "Welche Zahl suchen Sie? ";
    cin >> suche;
    int anfang=0,ende=19;
    char ergebnis[20];
    bool vergl=false;
    do
    {
    if (ende-anfang==2)
       {
        vergl=true;
       }
    else if (suche==Name[anfang])
       {
        strcpy(ergebnis,Name[anfang]);
        vergl=true;
       }
    else if(suche==Name[anfang+ende])
         {
         strcpy(ergebnis,Name[anfang+ende]);
         vergl=true;
         }
    else if(suche==Name[(anfang+ende)/2])
           {
           strcpy(ergebnis,Name[(anfang+ende)/2]);
           vergl=true;
           }
    else if (strncmp(suche,Name[(anfang+ende)/2])>0)
            {
            anfang=(anfang+ende)/2;
            strcpy(ergebnis,Name[(anfang+ende)/2]);
            }
    else if (strncmp(suche,Name[(anfang+ende)/2])<0)
            {
            ende=(anfang+ende)/2;
            strcpy(ergebnis,Name[(anfang+ende)/2]);
            }
    }while(vergl!=true);
    cout << ergebnis;
    

    Er bringt in Zeile 30 den fehler:

    E2285 Keine Übereinstimmung für 'strncmp(char *,char *)' gefunden.



  • strncmp() erwartet drei Parameter (der dritte ist die Anzahl an Zeichen, die maximal verglichen werden sollen) - du benötigst strcmp() stattdessen.

    PS: zwei char* kannst du nicht sinnvoll mit == vergleichen - und mehrere strcmp()-Aufrufe mit den selben Argumenten halte ich für wenig sinnvoll.



  • Siehe hierzu: http://www.cppreference.com/stdstring/strncmp.html

    Edit: Oh, CStoll war schneller! 😉



  • Ah stimmt ^^ hatte die falsche funktion. Danke jetz gehts soweit, sind nur noch paar kleiner Fehler drin die krieg ich aber warscheinlich selbst raus.


Anmelden zum Antworten