Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- //Outputfuction, very simple
- void output(int len, int * text)
- {
- int i;
- for (i = 0; i < len; i++)
- printf("%c",(char)text[i]);
- }
- //------------------------------------------------------------------------------
- //Reads a character from stdin (as an integer), returns a pointer to the start
- // of the text and length of the text as an integer in case of sucess.
- int importCharacter(int ** alloc_me)
- {
- int * text;
- // counter (return value)
- int text_length = 0;
- // init vars
- int blocksize = 10, memsize = 10;
- *alloc_me = malloc(memsize*sizeof(int));
- if (alloc_me == NULL)
- {
- return -2;
- }
- text = *alloc_me;
- int newChar;
- while ((newChar = getchar()) != EOF)
- {
- if (text_length == memsize)
- {
- memsize += blocksize;
- int * tmp;
- tmp = realloc(*alloc_me, memsize*sizeof(int));
- if (tmp == NULL)
- {
- return -2;
- }
- *alloc_me = tmp;
- }
- if (newChar > 127)
- {
- return -3;
- }
- text[text_length] = newChar;
- text_length++;
- }
- //Nachdem alle Zeichen gelesen sind (getchar() = EOF) kommt die L?nge des
- //eingelesenen Textes zur?ck.
- return text_length;
- }
- int ReplaceCharacters (int ** alloc_me_changed, int * text
- , int text_length, int * changed)
- {
- // init vars
- int * text_changed = NULL;
- int text_length_changed = 0;
- // int * my_text = NULL;
- // int text_length = importCharacter(&my_text);
- // da liest du den ganzen text noch einmal -> von main übergeben
- // int changed = 0; als adresse übergeben
- int blocksize = 10, memsize = 10;
- int MaxReplaceStrLength = 5;
- *alloc_me_changed = malloc((memsize)*sizeof(int));
- if (alloc_me_changed == NULL)
- {
- return -2;
- }
- text_changed = *alloc_me_changed;
- int newChar;
- int counter = 0;
- // Counter from first character in text to text_length
- while (counter < text_length)
- {
- newChar = text[counter];
- if (text_length_changed >= (memsize - MaxReplaceStrLength))
- {
- memsize += blocksize;
- int * tmp;
- tmp = realloc(*alloc_me_changed, memsize*sizeof(int));
- if (tmp == NULL)
- {
- return -2;
- }
- *alloc_me_changed = tmp;
- }
- switch (newChar)
- {
- case 38 : // &
- text_changed[text_length_changed++] = '&';
- text_changed[text_length_changed++] = 'a';
- text_changed[text_length_changed++] = 'm';
- (*changed)++;
- break;
- case 60 : // <
- text_changed[text_length_changed++] = '&';
- text_changed[text_length_changed++] = 'l';
- text_changed[text_length_changed++] = 't';
- (*changed)++;
- break;
- case 62 : // >
- text_changed[text_length_changed++] = '&';
- text_changed[text_length_changed++] = 'g';
- text_changed[text_length_changed++] = 't';
- (*changed)++;
- break;
- case 64 : // @
- text_changed[text_length_changed++] = ' ';
- text_changed[text_length_changed++] = '[';
- text_changed[text_length_changed++] = 'a';
- text_changed[text_length_changed++] = 't';
- text_changed[text_length_changed++] = ']';
- text_changed[text_length_changed++] = ' ';
- (*changed)++;
- break;
- default : text_changed[text_length_changed++] = newChar;
- break;
- }
- counter++;
- // text_length_changed++;
- }
- //Nachdem alle Zeichen gelesen sind (counter=text_length) kommt die L?nge des
- //eingelesenen Textes zur?ck.
- return text_length_changed;
- }
- int main()
- {
- int * my_text = NULL;
- int * text_changed = NULL;
- // read text
- int len1 = importCharacter(&my_text);
- if (len1 <= 0)
- {
- switch (len1)
- {
- case 0:
- printf ("No input text.\n");
- len1 = -1;
- break;
- case -2:
- printf ("Out of Memory.\n" );
- break;
- case -3:
- printf ("Invalid Input Character.\n" );
- break;
- default:
- printf ("Unknown error.\n");
- break;
- }
- free (my_text);
- return len1;
- }
- // write original text
- output (len1, my_text);
- printf("\n----------\n");
- // replace special characters by strings
- int NChanged = 0;
- int len2 = ReplaceCharacters(&text_changed, my_text, len1, &NChanged);
- if (len2 <= 0)
- {
- switch (len2)
- {
- case 0:
- printf ("No input text.\n");
- len2 = -1;
- break;
- case -2:
- printf ("Out of Memory.\n" );
- break;
- case -3:
- printf ("Invalid Input Character.\n" );
- break;
- default:
- printf ("Unknown error.\n");
- break;
- }
- free (my_text);
- free (text_changed);
- return len2;
- }
- // write text with replacements
- output (len2, text_changed);
- printf("\n----------\n");
- // write statistics
- printf("original string: %d chars\n", len1);
- printf("modified string: %d chars\n", len2);
- printf("modified chars : %d\n", NChanged);
- free (my_text);
- free (text_changed);
- return 0;
- }
Add Comment
Please, Sign In to add comment