+1 Daumen
2,8k Aufrufe

Schreiben Sie ein Programm, welches:

- einen Text einliest
- alle Zeichen außer Buchstaben aus dem Text entfernt
- den veränderten Text wiederausgibt
- die Länge des Textes ermittelt
- den Text in umgekehrter Reihenfolge ausgibt
- und entscheidet, ob dieser Text ein Palindrom ist oder nicht

Könnt ihr mir bei dieser Aufgabe helfen?

Avatar von

Was hast Du bereits versucht?

Das sind in meinen Augen mehrere "Programme".

Welche Programmiersprache?

Programmiersprache ist C++

Und ja, es ist eine Aufgabe.. Das Programm muss mehrere Sachen erfüllen

Das habe ich bereits versucht:

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char** argv) {
   
    string text;
    cout << "Geben sie einen Text ein: " << endl;
    cin >> text;
   
    char taste = 'j';
   
    int i = 0;
    int j = text.length()-1;
   
    for(i <=j; i++, i--)
        if(wort[i] != wort[j]) {
            cout << "Der Text ist kein Palindrom" << endl;
    else {
    
        cout << "Der Text ist ein Palindrom" << endl;
    }
   
    for (int i = text.length() - 1; i >= 0; i--) {
    cout << wort[i];
};
    return 0;
}


Wie kriegt man da hin, dass das Programm rückwärts.
    for(i <=j; i++, i--)

Schau Dir dieses Statement mal genauer an (was willst Du damit ausdrücken?).

Ich denke, dass Du schon in die richtige Richtung denkst.

for(int i = word.length(); i >= 0; i--)

2 Antworten

0 Daumen

#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char** argv)
{
  bool Palindrom;
  int i, j, k, len;
  string text, text1, text2;

  // Text eingeben
  cout << "Geben sie einen Text ein: " << endl;
  cin >> text;

  // Nicht-Buchstaben entfernen
  for (k = 0, i = 0; i < text.length(); i++)
  {
    if ((text[i] >= 'A') && (text[i] <= 'Z'))
      text1 += text[i]; // Grossbuchstabe
    else if ((text[i] >= 'a') && (text[i] <= 'z'))
      text1 += text[i]; // Kleinbuchstabe
    else
    {
      // ungültiges Zeichen ignorieren
    }
  }

  // neuen Text ausgeben
  cout << text1 << endl;

  // neuen Text umdrehen
  {
    len = text1.length();

    for (i = 0; i < len; i++)
    {
      text2 += text1[len - i -1];
    }

    // umgedrehten Text ausgeben
    cout << text2 << endl;
  }

  // Palindrom ?
  Palindrom = true;
  for (i=0; i < len; i++)
  {
    // (Grossbuchstabe == Kleinbuchstabe !)
    if ( tolower( text1[i] ) != tolower( text2[len-i-1]) )
    {
      Palindrom = false;
      break;
    }
  }

  if (Palindrom)
    cout << "Der Text ist ein Palindrom" << endl;
  else
    cout << "Der Text ist kein Palindrom" << endl;

  // Pause
  cin >> text;

  return 0;
}
Avatar von
0 Daumen

Mein Lösungsvorschlag:

#include <algorithm>
#include <iostream>
#include <cctype>

using namespace std;

int main() {
    cout << "Text: ";

    string s;
    getline(cin, s);
   
    string p(s.size(), 0);
    auto e = copy_if(s.begin(), s.end(), p.begin(), ::isalpha);
    p.resize(e - p.begin());
   
    cout << "Gefiltert: " << p << endl;
    cout << "Länge: " << p.size() << endl;
   
    string q = p;
    reverse(q.begin(), q.end());
    cout << "Gedreht: " << q << endl;

    transform(p.begin(), p.end(), p.begin(), ::tolower);
    transform(q.begin(), q.end(), q.begin(), ::tolower);
    if (q == p) {
        cout << "Der Text ist ein Palindrom" << endl;
    } else {
        cout << "Der Text ist kein ein Palindrom" << endl;
    }
}

Ich hoffe, die Aufgabe war nicht dafür vorgesehen, den Umgang mit Schleifen zu üben.

Avatar von 5,6 k

Ehrlich gesagt schon , aber trotzdem Danke.

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community