Palindrom Check
-
hi
also ich habe die aufgabe gestellt bekommen ein programm zu schreiben das überprüft ob ein eingegebenes wort ein palindrom ist. ein palindrom ist ein wort das von vorn und hinten gleich ist (anna reittier usw...)
nur kommt bei mir als ergebniss immer false raushier der code:
#include<stdio.h> int strLen(char str1[]); int checkLetters(char str1[]); int main() { char str1[100]; int result; printf("\nType in your word: \n"); gets(str1); result=checkLetters(str1); if(result==0) { printf("\nThis word is no palindrom!"); } else { printf("\nThis word is a palindrom!"); } return 0; } int strLen(char str1[]) { int len=0; for(int i=0; str1[i]!='\0'; i++) { len++; } return len; } int checkLetters(char str1[]) { int len, result=0; len=strLen(str1); for(int i=0; i!=len; i++) { if(str1[i]==str1[len]) { result=1; } else { break; } len--; } return result; }
bitte um hilfe!
-
Das ist ein C-Programm, gehört also in's ANSI C-Forum.
Außerdem möchte ich darauf hinweisen, dass es die Funktion strlen gibt, die das gleiche wie deine strLen-Funktion macht.
In checkLetters vergleichst du im ersten Durchlauf das erste Zeichen mit dem Nullbyte am Ende (an der Stelle len). Wahrscheinlich ist dort dein Fehler.
-
Sieht nach einem "um eins daneben"-Fehler aus.
nameless107 schrieb:
int len, result=0; len=strLen(str1); for(int i=0; i!=len; i++) { if(str1[i]==str1[len]) /// ^^^ { result=1; } else { break; } len--; } return result;
Noch ein paar Bemerkungen:
- Du nutzt unsichere C-Funktionen (gets --> Buffer overflow)
- Du hast keine Fehlerbehandlung (gets macht nichts im EOF-Fall. Dann bleibt im char-Array Müll drin stehenWenn Du keine C++ Features nutzen willst, dann bist Du hier im falschen Forum.
-
krümelkacker schrieb:
Sieht nach einem "um eins daneben"-Fehler aus.
nameless107 schrieb:
int len, result=0; len=strLen(str1); for(int i=0; i!=len; i++) { if(str1[i]==str1[len]) /// ^^^ { result=1; } else { break; } len--; } return result;
Die Schleife kommt auch nicht mit Zeichenketten ungerader Länge klar.
Probier es mal mit len=3 aus.i len ------ 0 3 1 2 2 1 3 0 4 -1 : :
i!=len gilt hier immer. Die Abbruchbedingung ist also nicht richtig.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
int isParlindrome(char *fwd){ size_t len = strlen(fwd); char *rev = fwd+len; :warning: len>>=1; :warning: while(len--){ if(*fwd++ != *--rev) return 0; } return 1; }
-
sry das ich es ins falsche forum geschrieben habe...hab nicht wirklich geguckt
wie ihr seht hab ich erst damit begonnen programmiern zu lernen und so ist mir der fehler nd aufgefallen...wie oben genannt vergleiche ich mit dem letzten zeichen das ja \0 is und so kann nichts gutes rauskommen, desshalb hab ich das len-- einfach vor die for loop gesetzt und jezt klappt es