All pastes #2067119 Raw Edit

Something

public text v1 · immutable
#2067119 ·published 2011-05-22 20:19 UTC
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;
}