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!!