C++ Palindrom analysieren

rony12

Commodore Pro
Registriert
Jan. 2007
Beiträge
4.962
Hallo,

ich sitze gerade vor einer aufgabe...

ich "soll" verschiedeneaufgaben mit dem palindrom anstellen...

nun will ich hier nicht konkret nach lösungen in form von 100% fertigem quelltext fragen, sondern eher, ob meine gedanklichen ansätze richtig sind....

Also als erstest soll ein Text eingelesen werden...

kein Problem...

Code:
cin >> string;


Als nächstes sollen alle zeichen, außer die buchstaben aus dem palindrom ausgefiltert werden.

Dabei dachte ich an eine for schleife, welche die länge des strings abgeht, und jedes zeichen in einer if() abfrage überprüft, und diese dann in einen vector schreibt.

Code:
for(int i = 0; i < string.length(); i++){
   if(string[i] != " " && string[i] != "!" && .....){
      vector.push_back(string[i]);
 }
}

Da scheitert es aber schon.... ist die Syntax falsch oder der komplette Ansatz?


Als nächstes soll die neue textlänge ausgegeben werden - da hätte ich einfach die länge des vector angegeben...


nun den text in umgekehrter reihenfolge ausgeben.

Auch hier hätte ich eine schleife gebaut, bei der einfach der vector rückwärts in einen neuen vector geschrieben wird.

und zu guter letzt:

Soll überprüft werden, ob es sich überhaupt um ein palindrom handelt.

Hier hätte ich zwei int variablen daklariert, einmal mit dem wert 0 (dem startwert) und einem dem letzten wert des vectors.

Dann werden von beiden variablenwerten die inahlte des vectors ausgelesen und vergleichen.
im nächstenschritt wird bei dem start wert einer dazu addiert, und beim endwert einer abgezogen, undwieder verglichen....


vieleicht merkt man, ichhabemirda schon wirklich ein paar gedanken gemacht... ich komme nur nicht beider schleifeweiter, die die ganze geschichte bereinigen und in einenvector übergeben soll....

ich wäre da wirklich sehr dankbar für eine kleine hilfestelleung :)
 
Du kannst/solltest keine namens Variable "string" definieren, string ist ein C++ Datentyp std::string.
Um zu testen ob ein Zeichen ein Buchstabe ist, gibt es die Funktion isalpha() http://www.cplusplus.com/reference/clibrary/cctype/isalpha/

Einen Vektor würde ich nicht nehmen: einfach nach der Eingabe des Eingang Strings die Länge desselbigen abfragen und einen zweiten String mit dieser Länge definieren. Vektor ist Overkill und macht den Vergleich am Ende komplizierter als es sein muss wenn du einfach nur 2 Strings vergleichen willst.
Also: kein Vektor, nur Strings.
 
Fang einfach von vorn und hinten an zu vergleichen, in der Mitte kannst du aufhören ;)
Ganz easy :p
 
das mit dem namen (string / vector) war eig. für das leichtere verständis gedacht... bei mir heißendie s und v.

du würdest alternativ einen string nehmen.

daran hatte ich auch schon gedacht.

ich hatte einen string erstellt:

string zwei;

und wollte dann mittels

zwei = s;

wie werte von dem einen in den anderenschreiben... aber ich werde jetzt mal mit dem isalphabetic probieren.
 
PHP:
if(string[i] != " " && string[i] != "!" && .....)
string liefert dir ein char, du vergleichst es aber mit einem String ( ' ' + '\0' ), du darfst nicht " " verwenden, sondern musst ' ' verwenden.

Gruß
BlackMark
 
ich habe das programm mittlerweile festgestellt


Code:
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <string.h>
#include <sstream>

using namespace std;

int main(int argc, char** argv) {
  
 
   string clean, reverse, toll, moin;
   stringstream ss, dd;
   
   int i = 0;

   cout << "Bitte einen Text eingeben:" << endl;
   cin >> moin;
   
    while (moin[i])
    {
        if (isalpha(moin[i])) 
                ss << moin[i];
                clean = ss.str();
        i++;
    }
   
    for(int y = clean.length(); y >= 0; y--){
        dd << clean[y];
        reverse = dd.str();
    }
    
    for(int w = 0; w <= clean.length(); w++){
        if(clean[w] != reverse [w+1]){
            toll = ("Nein");
            break;
        }else{
            toll = ("Ja");
        }
    }
       
   cout << "Der bereinigte Text lautet:" << endl;
   cout << clean << endl;
   cout << endl;
   cout << "Die Anzahl der Zeichen im neuen Text:" << endl;
   cout << clean.length() << endl;
   cout << endl;
   cout << "Der umgekehrte Text lautet:" << endl;
   cout << reverse << endl;
   cout << endl;
   cout << "Handelt es sich um ein Palindrom?" << endl;
   cout << toll << endl;
   
    return 0;
}
 
Deine Variablennamen ("moin", "ss", "toll", "dd"?!) könnten schöner/sprechender sein...

Vermutlich wirst du bald lernen, wie man Funktionen erstellt - in dem Fall kannst du ja die Lösung der Aufgabe nochmal anschauen und dann etwas von deinem Code in ein paar einfache Funktionen (z.B. "ispalindrome") auslagern.
 
Zurück
Oben