rendered paste body/*Ein Programm, um Dinge mit Strings zu machen, aber ohne die String-Lib*/
# include <stdio.h>
# include <stdlib.h>
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+1); /*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", string1);
return teil;
}