wörter umdrehen und palindrome finden in c?
heyho :) ich wollte testen ob das wort, was ich eingegeben habe auch ein palindrom ist, also umgekehrt genau dasselbe wort ergibt. Nun versuche ich nach dem letzten kommentar zu vergleichen also ob die werte gleich sind, weil so wäre es ein palindrom. Jedoch finde ich meinen fehler nicht und wollte mal fragen ob einer von euch ihn findet :) LG Alina
include
include
int main(){
//einlesen
printf("Geben Sie die Länge des Strings an");
int a;
scanf("%i", &a);
char text[a];
printf("Text eingeben:\n");
int i;
for (i=0;i<a;i++){
scanf("%c", &text[i]);
}
//umgekehrt ausgeben
int c;
c=a;
while (c!=0){
printf("%c", text[c]);
c--;
}
//Palindrom oder nicht
int count=0;
i=1;
int d;
d=a; //5
while (text[i]==text[d]){
count ++;
i++;
d--;
}
if(count == a){
printf("palindrom");
}
return 0;
}
4 Antworten
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int is_palindrome(const char *s) {
const size_t len = strlen(s);
const size_t limit = len / 2;
for (size_t i = 0; i < limit; ++i) {
if (tolower(s[i]) != tolower(s[len - i - 1])) {
return 0;
}
}
return 1;
}
Das sollte theoretisch auch Palindrome mit unterschiedlicher Groß- und Kleinschreibung finden. Zum Beispiel "Abba" oder "LESEesel" ... Habe jetzt aber keine Zeit zum testen ... hoffentlich sind keine Flüchtigkeitsfehler drin. ><
Ich lerne selber gerade erst C, daher kann ich dir nicht so wirklich helfen. Ich habe nur ein paar Ausgaben hinzugefügt und ein seltsames Ergebnis erhalten (siehe unten). Offenbar wird die Schleife, die die Eingabe des Textes liest, einmal ausgeführt, ohne dass ein Text eingegeben wurde und text[0] mit einem anderen Wert gefüllt als dem ersten Buchstaben.
#include <stdio.h>
#include <stdlib.h>
int main(){
//einlesen
printf("Geben Sie die Länge des Strings an: ");
int a;
scanf("%i", &a);
char text[a];
printf("Text eingeben:\n");
int i;
for (i = 0; i != a; i++) {
scanf("%c", &text[i]);
}
//umgekehrt ausgeben
int c;
c = a;
while (c > -1){
printf("text[%d] = %c\n", c, text[c]);
c--;
}
//Palindrom oder nicht
int count = 0;
i = 0;
int d;
d = a - 1; //4
while (text[i] == text[d]){
count ++;
i++;
d--;
}
if(count == a){
printf("palindrom");
}
return 0;
}
Ausgabe siehe Bild
mit scanf hast du genau die probleme, die man damit hat:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/004_c_ein_ausgabe_001.htm, kapitel scanf
also fgets benutzen.
i=1;
int d;
d=a; //5
while (text[i]==text[d]){
Arrays fangen bei 0 an zu zählen, also i = 0 ;)
Ansonsten hilft es vielleicht auch, wenn du dir in der while-Schleife probeweise die Buchstabenpaare (also text[i] und text[d]) mit printf() ausgeben lässt.