046
21.05.2006, 16:56 Uhr
~Stephi
Gast
|
Also jetzt doch nochmal was zum knobeln: Meine Unterfkt void SortStringLaenge sortiert zwar was, aber nicht so wie sie soll..Ausnahmsweise. Sieht jemand den Fehler im Algorithmus?
Code: |
# include <stdio.h> # include <string.h> # define ANZAHL 5
size_t halbwegs_sichere_eingabe(char s[81]) { int len=0; char buf[1024]; gets(buf); //gets ist gefaehrlich! len=strlen(buf); if(len>80) { strncpy(s,buf,80); s[80]='\0'; } else { strncpy(s,buf,len); s[len]='\0'; } return len; }
int Abfrage(char arr[ANZAHL][81]) { size_t i=0; while (i<ANZAHL) { if(!halbwegs_sichere_eingabe(arr[i])) break; else ++i; } return i; }
void SortStringLaenge(char AszEingabeStrings [ANZAHL][81], int iAnzahlStrings) { int i =0, j=0;
for(i = 0; i < iAnzahlStrings; i++) { for(j = i + 1; j < iAnzahlStrings; j++) { if( (strlen(AszEingabeStrings[i],AszEingabeStrings[j]) > 0) ) { char temp[81]; strcpy(temp, AszEingabeStrings[i]); strcpy(AszEingabeStrings[i], AszEingabeStrings[j]); strcpy(AszEingabeStrings[j], temp); } }
} for(i = 0; i < iAnzahlStrings; i++) printf("\n%s",AszEingabeStrings[i]);
}
char* StringUmdrehen(char string[81]) { int i; int j=0; char *pszstring; char *psztemp; char stringtemp[81];
int laenge = strlen(string);
strcpy(stringtemp, string); pszstring=string; psztemp=stringtemp;
for (i = laenge-1; i >= 0; i--) { *(pszstring+j)=*(psztemp+i); j++; } return string; }
void SortStringAlpha(char AszEingabeStrings[ANZAHL][81],int iAnzahlStrings) { int i=0,j=0;
for(i = 0; i < iAnzahlStrings; i++) { for(j = i + 1; j < iAnzahlStrings; j++) { if( (strcmp(AszEingabeStrings[i],AszEingabeStrings[j]) > 0) ) { char temp[81]; strcpy(temp, AszEingabeStrings[i]); strcpy(AszEingabeStrings[i], AszEingabeStrings[j]); strcpy(AszEingabeStrings[j], temp); } }
} for(i = 0; i < iAnzahlStrings; i++) printf("\n%s",AszEingabeStrings[i]); }
void ZeigeHilfe() { printf("*********PARAMETER HILFE***********\n"); printf("-u dreht Woerter um\n"); printf("-l sortiert nach Wort-Laenge\n"); printf("-a sortiert nach Alphabet\n"); printf("-h zeigt die Hillfe an\n"); }
int main(int arg, char *szString[]) { char szAbfrage[ANZAHL][81]; int j=0, iAnzahlStrings=0; if(arg > 1) {
if(strcmp(szString[1],"-u")==0) { Abfrage(szAbfrage); for (j=0;j<ANZAHL&&(strlen(szAbfrage[j])>0);++j) printf("\n%s",StringUmdrehen(szAbfrage[j])); } else if(strcmp(szString[1],"-l")==0) { iAnzahlStrings=Abfrage(szAbfrage); SortStringLaenge(szAbfrage,iAnzahlStrings);
}
else if(strcmp(szString[1],"-a")==0) { iAnzahlStrings=Abfrage(szAbfrage); SortStringAlpha(szAbfrage, iAnzahlStrings); }
else if(strcmp(szString[1],"-h")==0) ZeigeHilfe();
else ZeigeHilfe();
} else ZeigeHilfe(); return 0; }
|
|