Arrays Funktionen Palindrom bool
-
Guten Abend,
ich sitze grade vor folgender Aufgabe:
Schreiben Sie eine Funktion bool Palindrom (char K [ ]), die überprüft, ob eine übergebene Zeichenkette ein Palindrom ist. Der Rückgabewert ist entweder true ider false.Beispiel:
char Kette[5] = "otto"; //Version Extrem: "ein esel lese nie"
if (Palindrom (Kette) == true)
cout << Kette << " ist ein Palindrom";(Ein Palindrom ist ein Wort, dass von hinten und vorne gleich gelesen wird Bsp: anna)
Mein bisheriger Programmcode:
Code:
#include <iostream>using namespace std;
bool test(char q[],char z[])
{
int d=0;
for(int i=7; q[i] != q[0] && z[d] != '\0'; i--)
{
z[d]=q[i];
d++;
}int zähler=0;
for(int i=0; q[i]!='\0'&&z[i]!='\0' ;i++)
{if(z[i]==q[i])
{
zähler=zähler+0;
}
if(z[i]!=q[i])
{
zähler=zähler+1;
}}
if(zähler>0)
{
return false;
}
if(zähler==0)
{
return true;
}}
int main()
{
char text1[8];
char text2[8]={};
int erg;cout<<"Geben sie eine Zeichenkette mit max. 7 Zeichen ein: "<<endl;
cin>>text1;
cout<<endl;erg=test(text1,text2);
cout<<endl;if(erg==0)
{
cout<<"Die zu pruefende Zeichenkette ist kein Palindrom."<<endl;
}if(erg==1)
{
cout<<"Die zu pruefende Zeichenkette ist ein Palindrom."<<endl;
}cout<<endl;
return 0;
}
Das Programm startet zwar aber, den Zweck den es erfüllen soll tut es nicht.
Ich vermute, dass Mein Fehler im oberen Teil der Funktion liegt.
Ich möchte quasi eine Zeichenkette rückwärts in eine andere Variable reinkopieren und anschließend soll getestet werden, ob es das gleiche Wort ist bzw. ein Palindrom.
-
Warum nicht einfach von vorne nach hinten und gleichzeitig andersrum gehen und dabei auf Gleichheit prüfen? Das kann sogar ein Standard-algo für dich (ggf. effizienter) erledigen, solange du
reverse_iteratoranwendest.
-
Arcoth schrieb:
Warum nicht einfach von vorne nach hinten und gleichzeitig andersrum gehen und dabei auf Gleichheit prüfen? Das kann sogar ein Standard-algo für dich (ggf. effizienter) erledigen, solange du
reverse_iteratoranwendest.Ich weiß leider nicht was ein reverse_iterator ist, könntest du das genauer erläutern?
-
Brauchst du auch nicht, vergiss das.
Ich meinte im vorigen Satz
bool palindrom(char const* p, std::size_t l) { for (auto q = p+l-1; p <= q;) if (*p++ != *q--) return false; return true; }(Ungetestet)
-
Da müsste ein off-by-one Fehler drin sein, q (p+l) zeigt hinter das letzte Zeichen (also auf \0), der erste Vergleich schlägt fehl und die Funktion gibt false zurück. Deshalb muss q = p + l - 1.
-
Arcoth schrieb:
Brauchst du auch nicht, vergiss das.
Ich meinte im vorigen Satz
bool palindrom(char const* p, std::size_t l) { for (auto q = p+l-1; p <= q;) if (*p++ != *q--) return false; return true; }(Ungetestet)
könntet ihr mir noch erklären wie der Code aufgebaut ist, also der von Arcoth?
Was zum beispiel bedeutet das auto in der for schleife?
Und wieso schreibst du p+1-1, das ist doch dann 0?
und was bedeutet diese Zeile: (char const* p, std::size_t l)
-
Hardcor3chip schrieb:
Was zum beispiel bedeutet das auto in der for schleife?
Automatische Typerkennung.
qsoll den Typ haben, den das Ergebnis vonp+l-1hat.Und wieso schreibst du p+1-1, das ist doch dann 0?
Guck noch mal scharf hin, ob das wirklich da steht.
und was bedeutet diese Zeile: (char const* p, std::size_t l)
Was verstehst du da dran nicht? Funktionen kennst du doch offenbar, denn du benutzt selber welche. Die Funktion palindrom hat zwei Argumente,
pundl.phat den Typchar const*,lhat den Typstd::size_t.