Satzpalindrom mit isalpha()



  • Hallo,

    wir sollen ein Programm schreiben, dass ein Satzpalindrom erkennt. Ich scheitere aber schon daran alle Leerzeichen und Satzzeichen rauszuwerfen, damit nur die Buchstaben getestet werden können.

    Als Tipp stand dabei, wir sollen die isalpha() funktion verwenden um zu testen ob es sich um einen Buchstaben handelt.

    diese Funktion gibt einen positiven Wert zurück, falls es sich um einen Buchstaben handelt und andren falls 0.

    meine Fkt. sieht so aus, funktioniert aber hinten und vorne nicht.
    Ka. wie ich das anstellen soll.

    char *nospaces(char *arr, char *dest){
    
        int i;
        int lengt=strlen(arr);
    
        for(i=0; i<lengt; i++){
    
            if(isalpha(arr[i]!=0)){   //Wenn es ungleich 0 ist, dann sollen die 
                dest[i]=arr[i];       //Buchstaben einfach übertragen werden
            }
            else{
                i++;      //anderenfals soll dieses zeichen übersprungen werden 
    
            }
        }
    
        return dest;
    }
    
    int main()
    {
        char arr1[]="Hallo Tim du";
        char arr2[50];
    
        printf("%s",nospaces(arr1,arr2));
    
        return 0;
    }
    

    Die Ausgabe sind irgendwelche zufälligen Zeichen.

    Wäre cool, wenn mir wer weiterhelfen könnte.



  • benutzername321 schrieb:

    isalpha(arr[i]!=0)

    Was tut das?



  • damit wollte ich testen, ob es sich bei dem Zeichen an stelle i im übergebenen Array um einen Buchstaben handelt.

    Wenn der Rückgabewert ungleich 0 ist, dann handelt es sich um einen Buchstaben.



  • Stimmt es muss natürlich

    if(isalpha(arr[i])!=0)

    lauten.

    Jetzt ist die Ausgabe
    "Hallo@"



  • der post zwei über dem war auch von mir, hab nur aus Versehen einen anderen Benutzername hergenommen.

    SRY.



  • benutzername321 schrieb:

    i++; //anderenfals soll dieses zeichen übersprungen werden

    Damit überspringst du aber auch ein Zeichen im Ziel-Array. Da bleibt dann irgendein Mist stehen.



  • Ungetestet:

    char *nospaces(char *arr, char *dest)
    {
    
        int i;
        int b = 0;
        int lengt=strlen(arr);
    
        for(i=0; i < lengt; i++)        //i wird hier schon inkrementiert, 
        {                               //das darf in der Schleife nicht noch mal
                                        //gemacht werden! 
            if(isalpha(arr[i]) != 0)
            {                           //Wenn es ungleich 0 ist, dann sollen die
                dest[b] = arr[i];       //Buchstaben einfach übertragen werden
                ++b;                    //nach dem ersten Nicht-Alpha unterscheiden
            }                           //sich die Positionen, deshalb brauchen wir
        }                               //eine zweite Positionsvariable
    
        dest[b] = 0;                    //Der Zielstring braucht ein Endezeichen
        return dest;
    }
    


  • wie könnte ich das denn lösen?

    habs auch mal so probiert

    dest[i]=arr[i+1];
    

    damit werden zwar die leer bzw. satzzeichen überschrieben, nur sind die Buchstaben dann doppelt:

    Aus "Hallo Tim Meier" wird dann "HalloTTimMMeier"

    und falls 2 Leerzeichen oder ein Komma+Leerzeichen hintereinander sind, hilft das auch nicht weiter.



  • danke @Belli

    funktioniert, den Rest, also aufs Palindrom Testen bekomm ich selber hin


Anmelden zum Antworten