/*Ein Programm, um Dinge mit Strings zu machen, aber ohne die String-Lib*/ # include # include char *mergeStr( char *string1, char *string2, int strlaenge1, int strlaenge2); char *inverseStr(char *string1, int strlaenge1); char *Teilstr(char *string1, int strlaenge1); int main() { int aufgabe, string1laenge, string2laenge; aufgabe = string1laenge = string2laenge = 0; printf("\nWas möchten sie machen?\n"); printf("1 - 2 Zeichenketten aneinanderhaengen.\n"); printf("2 - Eine Zeichenkette umkehren.\n"); printf("3 - Eine Teilzeichenkette erstellen.\n"); char *string1 = "Ab mit dem Kopf"; /*Zwei Beispiel-Strings*/ char *string2 = "folge dem weissen Kaninchen"; while (*string1++ != '\0') string1laenge++; /*Stringlaege bestimmen*/ string1 -= (string1laenge+1); while (*string2++ != '\0') string2laenge++; string2 -= (string2laenge+1); scanf("%d", &aufgabe); switch (aufgabe) /*Aufgabe waehlen*/ { case 1: { mergeStr(string1, string2, string1laenge, string2laenge); break; } case 2: { inverseStr(string1, string1laenge); break; } case 3: { Teilstr(string1, string1laenge); break; } default: { printf("Diese Aufgabe gibt es nicht!\n"); break; } } return 0; } /*Haengt zwei Strings aneinander*/ char *mergeStr( char *string1, char *string2, int strlaenge1, int strlaenge2) { char *mergey; mergey = (char*) malloc(strlaenge1+strlaenge2+1); /*Speicherzuweisung für den neuen String*/ mergey -= (strlaenge1+strlaenge2+1); /*Pointerzuruecksetzung*/ while (*string1 != '\0') *mergey++ = *string1++; /*Aneinanderhaengen*/ while (*string2 != '\0') *mergey++ = *string2++; *mergey='\0'; /*Nullpointer am Ende*/ mergey -= (strlaenge1+strlaenge2); /*Pointerzuruecksetzung*/ printf("%s", mergey); return mergey; } char *inverseStr(char *string1, int strlaenge1) { int j; j=0; char *inverse; inverse=(char*) malloc (strlaenge1+1); /*Speicherzuweisung für den neuen String*/ while (*string1++ != '\0'); /*Setze Stringpointer nach hinten*/ string1-=2; while (j < strlaenge1) /*Char-zuweisung für Inversen String*/ { *inverse++ = *string1--; j++; } *inverse='\0'; /*Nullpointer am Ende*/ inverse -= (strlaenge1+1); /*Pointerzuruecksetzung*/ printf("\n\n\n%s", inverse); return inverse; } char *Teilstr(char *string1, int strlaenge1) { char *teil; int a, b, i; a=b=i=0; printf("Wo soll gestartet werden?"); scanf("%d", &a); printf("Bis wohin?"); scanf("%d", &b); teil=(char*) malloc (b-a+1); /*Speicherzuweisung für den neuen String*/ while(i<=b) /*Setze Startpointer*/ { i++; *string1++; } i=0; while (i<(b-a)) /*Schreibe Teilstring*/ { i++; *teil++=*string1++; } *teil='\0'; /*Nullpointer am Ende*/ teil -=(b-a); /*Pointerzuruecksetzung*/ printf("%s", teil); return teil; }