Stringverarbeitung
-
Hallo,
ich soll ein Programm schreiben,das prüft ob ein eingegebenes Wort ein Palindrom ist oder nicht. Ein Palindrom ist ein Wort, das von vorne oder hinten gelesen gleich bleibt, wie z.B Rentner.Hinweise (verbindlich):
· Der Benutzer darf immer nur 1 Wort eingeben
· Das Wort darf Groß- und Kleinbuchstaben, aber keine anderen Zeichen enthalten.
Die Eingabe ist daraufhin zu überprüfen.
· Die Funktion int toupper(int c) wandelt einen Kleinbuchstaben dessen ASCIICode
übergeben wird, in den entsprechenden Großbuchstaben um und gibt
diesen zurück. Die Headerdatei cctype ist zu inkludieren.
· Testen Sie auch Wörter mit ungerader Anzahl von Zeichen, z.B. „Rentner“Mein Programm :
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;int main ()
{
int c=0,a=0;
char string1 [25],string2[25];
cout<<"Geben Sie ein Wort ein.\n";
cin>>string1;
strcpy(string2,string1);
strrev(string2);
a=strcmp(string1,string2);
if (a==0)
cout<<"Das Wort ist ein Palindrom.\n";
else
cout<<"Das Wort ist kein Palindrom.\n";
return 0;}
Ich wusste nicht wie ich folgende Hinweise berücksichtigen soll :Das Wort darf Groß- und Kleinbuchstaben, aber keine anderen Zeichen enthalten.
Die Eingabe ist daraufhin zu überprüfen.
· Die Funktion int toupper(int c) wandelt einen Kleinbuchstaben dessen ASCIICode
übergeben wird, in den entsprechenden Großbuchstaben um und gibt
diesen zurück. Die Headerdatei cctype ist zu inkludierenWenn der Anfangsbuchstabe klein ist funktioniert es, aber wenn er groß ist zeigt das Programm das es kein Palindrom ist, weil nach "strrev(string2);"
der Anfangsbuchstabe von string2 klein und der Endbuchstabe groß ist.
-
Die Lösung steht doch in den Hinweisen: vorher das ganze Wort mit toupper in Großbuchstaben umwandeln.
Außerdem ist das mehr C als C++. Wieso bindest du denn den string-Header ein, wenn du dann doch nur mit char-Arrays rumfrickelst?Edit: das ist eher, wie man's in C++ machen würde.
Statt der for-Schleife bietet sich an, transform zu benutzen. Das kauft dir dein Lehrer/Prof aber nur ab, wenn du es selbst gemacht und verstanden hast.#include <iostream> #include <algorithm> using namespace std; int main () { string str; cout << "Geben Sie ein Wort ein." << endl; cin >> str; for (size_t i=0;i<str.length();i++)str[i]=toupper(str[i]); string revstr=str; reverse(revstr.begin(),revstr.end()); if (str==revstr)cout << "Das Wort ist ein Palindrom." << endl; else cout << "Das Wort ist kein Palindrom." << endl; }Übrigens: statt "\n" endl für eine neue Zeile benutzen, da letzteres auch einen expliziten Flush beinhaltet (also Ausgabe von allem, was noch aussteht).