Question: Using only stdio.h, string.h and stdlib.h libraries how would I go about implementing this?

I'm quite new to programming so please bear with me!

Answer: 
Since this is homework, here is the verbal description:

Run a loop over the original string and use the functions `isalnum()` to determine if a character is alphanumeric. Maintain a second `char array` of reasonable size and every time you encounter an AlphaNum, insert it to that array. Once all AlphaNum characters have been copied to the second array, **NULL** terminate it and you have your string.

Note: `isalnum()` is defined in `ctype.h`, so if you aren't allowed to use that, you may have to define this function for yourself. That is another exercise of it's own.
The best way is to use the `isalnum()` from `ctype.h` but now that is not an option, I have written a not-standard/non-portable function called `isalnum_not_prefered()` which is the equivalent of `ctype.h`'s `isalnum()`. 

```
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

int isalnum_not_prefered(char s) 
{
    if((s >= 'A' && s <= 'Z') || 
       (s >= 'a' && s <= 'z') || 
       (s >= '0' && s <= '9')) 
        return 1;
    return 0;
}

int main(void)
{
    char str[] = "this!234$#&@#$^is5@#$a#@$4677~=_?}valid2234kjstring";
    int len = strlen(str);
    int i, j=0;

    char *newstr1 = NULL;
    char *newstr2 = NULL;

    if ((newstr1 = (char *) malloc(sizeof(char) * len + 1)) == NULL) {
        printf("unable to allocate memory \n");
        return -1;
    }

    for (i=0 ; i<len ; i++) {
        if (isalnum(str[i])) {
            newstr1[j] = str[i];
            j++;
        }
    }
    newstr1[j] = '\0';

    if ((newstr2 = (char *) malloc(sizeof(char) * len + 1)) == NULL) {
        printf("unable to allocate memory \n");
        return -1;
    }

    j=0;
    for (i=0 ; i<len ; i++) {
        if (isalnum_not_prefered(str[i])) {
            newstr2[j] = str[i];
            j++;
        }
    }
    newstr2[j] = '\0';

    printf("string  : %s \n", str);
    printf("result1 : %s \n", newstr1);
    printf("result2 : %s \n", newstr2);

    free(newstr1);
    free(newstr2);

    return 0;
}

```

Points to note:

1. strings in `C` is terminated with `\0`. So the new string that your are populating should also terminate with `\0`
2. `malloc()`'ed memory must be `free()`'ed
3. `malloc()` errors should be handled
4. this code is not portable as it assumes the machines character set to be `ASCII`. If the hardware supports some other character set (say `EBCDIC`) then this may not work as expected.

Hope this helps!