C Text in Array speichern scheitert.

Ralaud

Cadet 3rd Year
Registriert
Mai 2017
Beiträge
43
Text in Array speichern + Palindrom

Hay, es geht um mein Programm, welches

  1. ein Text einlesen soll, (✔)
  2. den Text wieder ausgibt, (✔)
  3. die Zeichen des Textes ermittelt, (✔)
  4. den Text ohne Sonderzeichen in Kleinschreibung ausgibt, (✔)
  5. und entscheidet ob dieser Text ein Palindrom ist. EDIT: (✔)

Ich habe versucht den Text, welches ohne Sonderzeichen und in Kleinschreibung ausgegeben wird, in ein Array zu speichern (hier: c2[255], innerhalb der ersten For-Schleife zu finden). Dasselbe habe ich in der zweiten For-Schleife gemacht (hier: txt[255]), um den Text, welches inventiert wird abzuspeichern. Sodass ich diese beiden Texte vergleichen kann, um zu prüfen ob der Text ein Palindrom ist oder nicht.

Mein Problem ist nun, dass der Text nicht richtig in das Array c2[255] abgespeichert wird, zur Kontrolle habe ich den Text in Array c2[255] noch einmal ausgegeben. Und bei Array txt[255] werden nur 5 Zeichen ausgegeben.

test.png

Code:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>


int main()
{
    char text[255],c2[255],txt[255];
    int count,len, i=0, [I]j=0, k=0[/I];

    //erneute ausgabe der eingaben und zählen der zeichen des eigegebenen textes

    printf("Schreiben Sie hier einen Text in der maximalen laenge 255 Zeichen!\n");
  fgets(text, sizeof(text), stdin);
    printf("\n\nDeine Eingabe war:\n\n");
    puts(text);



    count= strlen(text);
    printf("Die Anzahl der Zeichen: %d\n\n", count-1);

    printf("Die Eingabe in Kleinbuchstaben und ohne Sonderzeichen umgewandelt:\n\n");

    //Großbuchstaben zu kleinbuchstaben umwandeln
    //korrigiert!!
   for (; i<=count; i++)       //jeder Buchstabe muss einzeln umgewandelt werden
    {


       if (isalpha(text[i])!=0)
          {
               c2[j]= putchar(tolower(text[i]));
               j++;
         

       }
    } c2[j]= '\0';
            len = strlen(c2);   // länge wird nicht korrekt ausgegeben, da die buchstaben in c2(zeile:35) fehlerhaft abgespeichert werden

            printf("\n\nEingabe ausserhalb der for-schleife:\n\n%s\n%d\n\n",c2,len);



            //text von c2 umgekehrt ausgeben, um nacher zu vergleichen ob der text ein palindrom ist
        //korrigiert!!
           for (i=len-1;i>=0;i--) {



             txt[k]= putchar(c2[i]);
                k++;
                } txt[k]= '\0';


            printf("\n\n");


            // vergleich -> ist der text ein palindrom(wert 0=der text ist ein palindrom)
            //korrigiert!!! 

                  if (strcmp(c2,txt) == 0) {printf ("Palindrom\n\n");}
            else {printf("Kein Palindrom\n\n");}



    return 0;
}

Ich habe schon die Forensuche benutzt, aber leider komm ich da auch nicht so richtig weiter.

EDIT: Das Programm funktioniert jetzt, danke für eure Hilfe.

Mit freundlichen Grüßen. :)
 
Zuletzt bearbeitet: (Code verändert!)
In der ersten For-Schleife brauchst du zwei Zähl-Variablen. Einmal Länge input (länge mit Leerzeichen) einmal Output (ohne Leerzeichen). Aktuell ersetzt du die Leerzeichen mit nicht initialisierten Speicherbereichen. Und das gibt dann so merkwürdige Phänomene.

Sowas in der Richtung:
Code:
int j = 0;
for (i=0; i<=count; i++) 
  {
       if (isalpha(text[i])!=0) 
          {     
               c2[j]= putchar(tolower(c1)); 
               j++;
          }  
  }
 
Zuletzt bearbeitet:
Nilson schrieb:
In der ersten For-Schleife brauchst du zwei Zähl-Variablen. Einmal Länge input (länge mit Leerzeichen) einmal Output (ohne Leerzeichen). Aktuell ersetzt du die Leerzeichen mit nicht initialisierten Speicherbereichen. Und das gibt dann so merkwürdige Phänomene.

Sowas in der Richtung:
Code:
int j = 0;
for (i=0; i<=count; i++) 
  {
       if (isalpha(text[i])!=0) 
          {     
               c2[j]= putchar(tolower(c1)); 
               j++;
          }  
  }

Vorweg, vielen dank, hab erst versucht die Leerzeichen einfach durch einen anderen Array zu ersetzen, aber dein Vorschlag ist viel besser. Ich habe es jetzt angewendet, es funktioniert.

Code:
    for (; i<=count; i++)      
    {

       if (isalpha(text[i])!=0)
          {
               c2[j]= putchar(tolower(text[i]));
               j++;

       }
    } c2[j]= '\0';


Aber leider gibt die zweite For-Schleife nur 5 zeichen aus, was habe ich da falsch gemacht?
 
Zuletzt bearbeitet:
Code:
for (i=sizeof(len);i>=0;i--) {

Du benutzt hier sizeof für die Länge, aber len ist ja schon die Länge des Strings. Sizeof gibt in dem Fall nur die byte-länge eines Integers aus, das ist 4 (32bit integer) und daher gibt er 5 Zeichen aus.
Einfach das sizeof weglassen
 
Rondrer schrieb:
Code:
for (i=sizeof(len);i>=0;i--) {

Du benutzt hier sizeof für die Länge, aber len ist ja schon die Länge des Strings. Sizeof gibt in dem Fall nur die byte-länge eines Integers aus, das ist 4 (32bit integer) und daher gibt er 5 Zeichen aus.
Einfach das sizeof weglassen

Danke für deine Hilfe, es hat funktioniert

Code:
            for (i=len-1;i>=0;i--) {


             txt[k]= putchar(c2[i]);
                k++;
                } txt[k]= '\0';

Nun will es das Palindrom nicht erkennen, für jedes Bespiel gibt das Programm an, dass es kein Palindrom sei.

EDIT: ist erledigt

Code:
        if (strcmp(c2,txt) == 0) {printf ("Palindrom\n\n");}
            else {printf("Kein Palindrom\n\n");}

Danke nochmal an euch alle :)
 
Zuletzt bearbeitet:
Zurück
Oben