Leerzeichenentferner für Palindrom-Ganzsätze
-
Hallo,
Ich habe von meinem lehrer einen auftrag bekommen um bei diesem Programm die Leerzeichen von der Eingabe zu entfernen, dass auch ganze Sätze als Palindrom erkannt werden. Jedoch weiß ich nicht wie das geht und wollte euch fragen wie das funktioniert. Ich hoffe auf rasche Antworten
PS: Man darf keine Stringfunktionen aus "<string.h>" verwenden
```#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define SIZE 500 // Präprozessor-Konstante int laenge(char[]); void allesgross(char[],int); // Prototypen bool istPalindrom(char[],int); int main() { char text[SIZE] = {' '}; // Variablen(array) int zaehler = 0; // Variablen printf("Geben sie ihren Text ein: "); fgets(text,SIZE,stdin); // Eingabe zaehler = laenge(text); allesgross(text, zaehler); printf("Der Text betraegt %d Zeichen\n",zaehler-1); printf("In Grossbuchstaben lautet der Text: %s",text); if(istPalindrom(text,zaehler) == true) { printf("Palindrom enthalten"); } else // Palindrom-Erkenner { printf("Kein Palindrom enthalten"); } return 0; } int laenge(char text[]) //Wertfunktion(Zeichen-Zähler) { int zaehler = 0; while(text[zaehler] != '\0') { zaehler++; } return zaehler; } void allesgross(char text[SIZE], int zaehler) //Leerfunktion (Großschrift-Umwandler) { for(int i = 0; i < zaehler; i++) { if(text[i] >= 'a' && text[i] <= 'z') { text[i] = text[i] - ('a' - 'A'); } } } bool istPalindrom(char text[],int zaehler) // Wertfunktion (Palindrom erkenner) { int i = 0; int j = zaehler-2; while(i < j) { if(text[i]==text[j]) { i++; j--; } else { return false; } } return true; }
-
Zwei Zeiger(oder meinetwegen zwei Zählindizes, wie in deinem jetzigen Code, wenn du keine Zeiger magst). Anfangs beide auf den Anfang der Zeichenkette. Der eine Zeiger dient zum Durchgehen der Zeichenkette von vorne nach hinten. Der andere Zeiger zeigte eine Position in der Zeichenkette an, zu der du ein Zeichen kopieren möchtest.
Nun gehst du die Zeichenkette von vorne nach hinten durch. Wenn das aktuelle Zeichen kein Leerzeichen ist, dann machst du zwei Sachen:
- Du kopierst das aktuelle Zeichen an die Position, die vom Kopierzielzeiger angezeigt wird
- Du setzt den Kopierzielzeiger eine Position weiter.
Das wiederholst du bis zum Ende der Zeichenkette, inklusive abschließendem Nullzeichen.
-
#include <stdio.h> void entferneCR(char *cstring) { do { if(*cstring == '\n') *cstring = 0; }while(*cstring++); } void entferneSpace(char *cstring) { char *ziel = cstring; do { if(*cstring != ' ') *ziel++ = *cstring; }while(*cstring++); } int main() { char in[500] = {0}; while(strcmp(in, "ende")) { fgets(in, 500, stdin); entferneCR(in); printf("vorher: *%s*\n", in); entferneSpace(in); printf("nachher: *%s*\n\n", in); } }
-
@SeppJ Vielen Dank für die Hilfe. Dank deinen Tipps habe ich es mittlerweile geschaft.