diff options
Diffstat (limited to 'split3.c')
-rw-r--r-- | split3.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/split3.c b/split3.c new file mode 100644 index 0000000..7f2fc18 --- /dev/null +++ b/split3.c @@ -0,0 +1,76 @@ +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> +#include <string.h> + +int *genccountdict(char *); +char *nodup(char *, int *); +char *nnodup(char *, int *); +char *dup(char *, int *); + +int main(int argc, char **argv) +{ + int i; + if(argc!=2) + exit(1); + + char *string = *(argv+1); + int *dict = genccountdict(string); + + for(i = 0; i < strlen(string); i++) + string[i] = toupper(string[i]); + + printf("nodup: %s\n", nodup(string, dict)); + printf("nnodup: %s\n", nnodup(string, dict)); + printf("dup: %s\n", dup(string, dict)); + return 0; +} + +int *genccountdict(char *input) +{ + int *dict = calloc(sizeof(int), 26); + int i; + for(i=0; i<strlen(input); i++) + if(isalpha(input[i])) + dict[toupper(input[i])-'A']++; + return dict; +} + +char *nodup(char *input) +{ + char *output = malloc(strlen(input)+1); + int i, outpt = 0; + + for(i=0; i<strlen(input); i++){ + if(!dict[input[i]-'A']){ + output[outpt++]=input[i]; + dict[input[i]-'A'] = 1; + } + } + output[outpt]='\0'; + return output; +} + +char *nnodup(char *input, int *dict) +{ + char *output = malloc(strlen(input)+1); + int i, outpt = 0; + for(i=0; i<strlen(input); i++) + if(dict[input[i]-'A']==1) + output[outpt++]=input[i]; + output[outpt]='\0'; + return output; +} + +char *dup(char *input, int *dict) +{ + char *output = malloc(strlen(input)+1); + int i, outpt = 0; + for(i=0; i<strlen(input); i++) + if(dict[input[i]-'A']>1) + output[outpt++]=input[i]; + output[outpt] = '\0'; + int ndict[26]; + memset(ndict, 0, 26*sizeof(int)); + return nodup(output, ndict); +} |