Palindrom ( Wortvergleich)



  • Yo, das Prog soll
    eine Eingabe z.B.: 123SSAAA rückwärts ausgeben, also: AAASS321;
    nun soll es auch erkennen, wann ein Programm z.B.
    ein sogenanntes Palindrom ist: ANNA, LOL, AABBAA; also in Beide Richtungen
    gleich geschrieben;
    Irgendwo ist der Wurm drin^^.
    Bitte helft

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 200
    
    int main(){
    
    char *schwul = malloc(sizeof(char)*N);
    printf("Machen Sie Ihre Eingabe:\n");
    fgets(schwul,N,stdin);
    schwul[strlen(schwul)-1]=0;
    int laenge = strlen(schwul)-1;
    char *p;
    p = schwul + sizeof(char)*laenge;
    int counter = 0;
    
      while(laenge>=0){
      printf("%c", *(p--));
    
      if( *schwul == *p ){
      counter++;
      }
      *(schwul+1);
      laenge--;
    
      }
    if(counter==laenge){
    printf("Es handelt sich um ein Palindrom!\n");
    }
    
    system("Pause");
    return 0;
    }
    


  • hatte schon so ein Gefühl:

    if(counter==laenge+2)...

    dann gehts, versteh grad aber nicht genau wo die +2 bei laenge herkommen...
    einmal nehm ich doch das return schon raus bei schwul, und zweitens ist doch bei länge das \0 schon drin oder wird das übergangen oder wie?



  • halt funtzt doch nicht, laenge wird ja runtergezählt



  • Was willst du da mit dem schwulen malloc?
    Gucke er dadda:

    int is_palindrom ( char* s ) {
    	char *u = s + strlen(s)-1;
    	while ( u >= s )
    		if ( *s++ != *u-- )
    			return 0;
    	return 1;
    }
    int main() {
    	if ( is_palindrom ( "LOL" ) )
    		puts("Ja, Bruder!");
    	return 0;
    }
    


  • also elegant geht anders, aber wenns denn so sein soll:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 200
    
    int main(){
    
    char *schwul = malloc(sizeof(char)*N);
    printf("Machen Sie Ihre Eingabe:\n");
    fgets(schwul,N,stdin);
    schwul[strlen(schwul)-1]=0;
    int laenge = strlen(schwul);
    char *p;
    p = schwul + laenge - 1;
    int counter = 0;
    
    while(laenge>0){
    
      if( *schwul == *p-- )
        counter++;
    
      schwul++;
      laenge--;
    }
    if(schwul-counter-1==p)
       printf("Es handelt sich um ein Palindrom!\n");
    
    system("Pause");
    return 0;
    }
    

Anmelden zum Antworten