diff options
author | EliteTK <tomasz.kramkowski@gmail.com> | 2014-09-06 18:33:33 +0100 |
---|---|---|
committer | EliteTK <tomasz.kramkowski@gmail.com> | 2014-09-06 18:33:33 +0100 |
commit | 0a23128c376540cd139dde19a1f09ae40617e670 (patch) | |
tree | 02b07925f74eb6fddf0b8e7a94fbaad4fc028422 /split32.c | |
parent | b60441758f9832a67f60e51a4ee92d16b166b9fb (diff) | |
download | c-stuff-0a23128c376540cd139dde19a1f09ae40617e670.tar.gz c-stuff-0a23128c376540cd139dde19a1f09ae40617e670.tar.xz c-stuff-0a23128c376540cd139dde19a1f09ae40617e670.zip |
Latest 'stuff'
Diffstat (limited to 'split32.c')
-rw-r--r-- | split32.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/split32.c b/split32.c new file mode 100644 index 0000000..78e72c7 --- /dev/null +++ b/split32.c @@ -0,0 +1,74 @@ +#include <stdio.h> +#include <ctype.h> +#include <stdlib.h> +#include <string.h> + +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[26]; + memset(dict, 0, 26*sizeof(int)); + + 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)); + + int ii; + + for(i=0; i<26; i++){ + putchar('A'+i); + for(ii=0; ii<dict[i]; ii++) + putchar('='); + putchar('\n'); + } + return 0; +} + +char *nodup(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']){ + 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); +} |