Frage von Alinchen24, 92

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;
}
Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TeeTier, Community-Experte für programmieren, 25
#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. ><

Antwort
von ceevee, 29
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.

Kommentar von gf0503 ,

Probiers mal aus, es funktioniert trotzdem nicht.

Antwort
von gf0503, 22

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

Antwort
von maximilianus7, 17

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.

Keine passende Antwort gefunden?

Fragen Sie die Community