TE
TE
boss3D
Guest
AW: [C] Hilfe beim Programmieren und Verständnis-Fragen zu Code-Beispielen ...
Das Palindrom-Beispiel hatten wir schon mal, allerdings habe ich jetzt einen ganz neuen Lösungsansatz (der auch bereits einwandfrei funktioniert, wenn ich jedes Wort in ein eigenes char array stecke). Doof nur, dass ich nur dann überhaupt eine Ausgabe bekomme, wenn ich diese wie im auskommentierten Teil in der main mache. Wenn sie so umgesetzt wird, wie im Code blau markiert, bekomme ich eine Windows Fehlermeldung. Dabei hat exakt diese Ausgabe bei der anderen Version des Programms super funktioniert ... Why?
Das Palindrom-Beispiel hatten wir schon mal, allerdings habe ich jetzt einen ganz neuen Lösungsansatz (der auch bereits einwandfrei funktioniert, wenn ich jedes Wort in ein eigenes char array stecke). Doof nur, dass ich nur dann überhaupt eine Ausgabe bekomme, wenn ich diese wie im auskommentierten Teil in der main mache. Wenn sie so umgesetzt wird, wie im Code blau markiert, bekomme ich eine Windows Fehlermeldung. Dabei hat exakt diese Ausgabe bei der anderen Version des Programms super funktioniert ... Why?
Code:
#include <stdio.h>
int checkLength(const char *s) {
int length=0;
while (*(s+length) != '\0') {
length++;
}
return length;
}
int checkPalindrome(char *s) {
int i=0, j=0, length=checkLength(s);
char firstHalf[50]={0}, secondHalf[50]={0};
[COLOR=seagreen]/* Wandle alle Großbuchstaben in Kleinbuchstaben um. */ for (i=0; i<length; i++) {
if (*(s+i) >= 'A' && *(s+i) <= 'Z') {
*(s+i)+=32;
}
}
[COLOR=seagreen]/*
Zerlege das zu überprüfende Wort in 2 Hälften und speichere jede in einem eigenen string.
Der string, der die zweite Worthälfte bekommt, muss verkehrt herum angefüllt werden.
*/ for (i=0, j=(length-1); i<((length-1)/2), j>((length-1)/2); i++, j--) {
*(firstHalf+i)=*(s+i);
*(secondHalf+i)=*(s+j);
}
[COLOR=seagreen]/* Vergleiche die beiden Strings. */ i=0;
while (*(firstHalf+i) != '\0' || *(secondHalf+i) != '\0') {
if (*(firstHalf+i) != *(secondHalf+i)) {
return 1;
}
i++;
}
return 0;
}
int main(void) {
int i=0;
[COLOR=royalblue][B] char *s[] = {"Hannah", "Smartphone", "Retsinakanister", "Lagerregal", "programmieren", 0 };
while (*(s+i) != '\0') {
if (checkPalindrome(*(s+i))==0) {
printf("%s is a Palindrome!\n", *(s+i));
} else {
printf("Sorry, %s isn't a Palindrome.\n"[/B][COLOR=royalblue][B][COLOR=royalblue][B], *(s+i)[/B]);
}
i++;
}[/B]
[COLOR=seagreen] /*
[COLOR=seagreen][COLOR=royalblue][COLOR=seagreen]char *s1 = "Hannah", *s2 = "Smartphone", *s3 = "Retsinakanister", *s4 = "Lagerregal", *s5 = "programmieren";
if (checkPalindrome(s1)==0) {
printf("%s is a Palindrom!\n", s1);
} else {
printf("%s isn't a Palindrom.\n", s1);
}
if (checkPalindrome(s2)==0) {
printf("%s is a Palindrom!\n", s2);
} else {
printf("%s isn't a Palindrom.\n", s2);
}
if (checkPalindrome(s3)==0) {
printf("%s is a Palindrom!\n", s3);
} else {
printf("%s isn't a Palindrom.\n", s3);
}
if (checkPalindrome(s4)==0) {
printf("%s is a Palindrom!\n", s4);
} else {
printf("%s isn't a Palindrom.\n", s4);
}
if (checkPalindrome(s5)==0) {
printf("%s is a Palindrom!\n", s5);
} else {
printf("%s isn't a Palindrom.\n", s5);
}
putchar('\n');
*/
return 0;
}
Zuletzt bearbeitet:
. Warum man nicht den an die Funktion übergebenen String benutzen darf/kann, ist mir suspekt. Muss etwas mit dem Array von char Arrays zu tun haben. Denn ob man (wie oben) den 2.String in checkPalindrome(), oder schon in der main() ist egal:



