Problem mit der Ausgabe von Strings



  • Hi, die Aufgabenstellung war einen String einzulesen, der mehrere Leerzeichen enthält. Wobei ein Leerzeichen ein Endezeichen darstellt. Dieser String wird so viele Teilstrings aufgeteil wie es Leerzeichen gibt.
    Die Einzelnen Strings werden in ein 2Dimensionales Feld geschrieben.
    Aufgabenstellung:
    String einlesen und in Teilstrings umwandeln->funktioniert
    Den String in umgekehrter Reihenfolge ausgeben->funktioniert
    Den String alphabetisch ordnen->funktioniert
    Die Ausgabe des umgekehrten Strings in einen String schreiben->haperts 😕
    Problem is er gibt mir bei dem String irgendwelche Zeichen aus und dann läuft alles korrekt, wie bekomme ich das weg. Hab das Gefühl das ich irgendeinen String am Anfang ausgebe.

    Verbesserungen beim Codingstil sind natürlich willkommen, hier also der Code:

    #include <iostream>
    #include <stdlib.h>
    #include <conio.c>
    #define BLANK 32
    
    using namespace std;
    typedef char wort[50];
    
    int createliste (int, char *, wort *);//Teilt den String in einzelne Strings
    void stringsortieren(wort *,int);//Sortiert die einzelnen Strings alphabetisch
    void stringturn(wort *,int,char *);//Gibt den String verkehrt aus
    
    int main(int argc, char *argv[])
    {
    wort sliste[10];
    char eingabestring[500];
    char umgekehrterstring[500];
    int laenge;
    
    clrscr();
    fflush(stdin);
    gets(eingabestring);
    laenge=strlen(eingabestring);
    while (laenge>500)
    {
    cout<<"Zu viele Zeichen eingeben, bitte wiederholen Sie die Eingabe. MAX 500 Zeichen\n";
    eingabestring[0]='\0';
    gets(eingabestring);
    }
    
    int anzahl;
    anzahl=createliste(laenge,eingabestring, sliste);
    
    cout<<"Die einzelnen Strings\n";
    int y=0;
    for (y=0;y<=anzahl;y++)
    {
    cout<<sliste[y]<<"\n";
    }
    
    stringturn(sliste,anzahl,umgekehrterstring);
    cout<<"Die einzelnen Strings in umgekehrter Reihenfolge\n";
    y=0;
    for (y=0;y<=anzahl;y++)
    {
    cout<<sliste[y]<<"\n";
    }
    
    stringsortieren(sliste,anzahl);
    y=0;
    cout<<"Strings sortiert\n";
    for (y=0;y<=anzahl;y++)
    {
    cout<<sliste[y]<<"\n";
    }
    cout<<"Mehrere Strings umgekehrt in einen kopiert\n";
    puts(umgekehrterstring);
    
      system("PAUSE");	
      return 0;
    }
    
    int createliste(int laenge,char *eingabestring, wort *sliste)
    {
    
    int durchlauf=0,ausgeben;
    int i=0,x=0;
    //2Dimensionale Feld füllen
      for(durchlauf=0;durchlauf<=laenge;durchlauf++)
      {
      fflush(stdin);
       sliste[i][x]=eingabestring[durchlauf];
         if(eingabestring[durchlauf]==BLANK)
         {
         sliste[i][x]='\0';
         i++;
         x=-1;
         }
           if(durchlauf==laenge)
           {
           sliste[i][x]='\0';
           }
       x++;
      }
    return i;
    }
    
    void stringsortieren(wort *sliste,int anzahl)
    {int x=0,fertig=0;
    char hilfsstring[500];
    for(;;)//Sortieralgorithmus
    {
    fertig=0;
    x=0;
        for (x=0;x<anzahl;x++)
            {
                if(strcmp(sliste[x],sliste[x+1])>0)
                    {
                    strcpy(hilfsstring,sliste[x]);
                    sliste[x][0]='\0';
                    strcpy(sliste[x],sliste[x+1]);
                    strcpy(sliste[x+1],hilfsstring);
                    hilfsstring[0]='\0';
                    fertig++;
                    }
            }
    if(fertig==0)
    {
    x=0;
    break;
    
    }
    }
    }
    
    void stringturn(wort *sliste,int anzahl,char *umgekehrterstring)
    {
    int p=0;
    p=anzahl;
    //Hier ist das Problem!
    for (p=anzahl;p>=0;p--)//Hänge von sliste[p] den letzten String in einen string
    {
    strcat(umgekehrterstring,sliste[p]);
    }
    //Hier endet das Problem!
    
    fflush(stdin);
    p=0;
    //Umgekehrte Ausgabe des Strings
    for (p=0;p<=anzahl;p++)
    {
    char hilfsstring[500];
    strcpy(hilfsstring,sliste[p]);
    sliste[p][0]='\0';
    strcpy(sliste[p],sliste[anzahl]);
    strcpy(sliste[anzahl],hilfsstring);
    hilfsstring[0]='\0';
    anzahl--;
    }
    }
    


  • ist kein ansi-c .. du musst dich wohl nach c++ verschieben lassen.



  • Auch wenn es nicht rein ANSI-C ist, geb ich ne Antwort ab.

    @Tommy
    Dein Fehler rührt daher, dass du vergessen hast deine Variablen zu initialisieren (bzw. nullzusetzen). Wenn in C(++) Speicher reserviert wird und die Varible darauf zeigt, dann heißt das nicht gleich, dass da auch nichts drinsteht! Für deinen Fall heißt das, du musst umgekehrterstring mit "" inialisieren. Schließlich sucht strcat() solange im String bis es das Stringendezeichen gefunden hat und hängt da dann den Text dran.

    Also immer dran denken, deine Variablen zu initialisieren!!


Anmelden zum Antworten