aboutsummaryrefslogtreecommitdiffstats
path: root/split3.c
diff options
context:
space:
mode:
authorEliteTK <tomasz.kramkowski@gmail.com>2014-05-24 12:58:39 +0100
committerEliteTK <tomasz.kramkowski@gmail.com>2014-05-24 12:58:39 +0100
commit5bbcb1f542c239ce1e9b5a7d3c7214a7bf001d6a (patch)
tree47ef91ea74fc60660d79b87ec00f8f25d6366722 /split3.c
parent420ef6622d9e8de96ffc1843b9b4c3c3ea87b1c9 (diff)
downloadc-stuff-5bbcb1f542c239ce1e9b5a7d3c7214a7bf001d6a.tar.gz
c-stuff-5bbcb1f542c239ce1e9b5a7d3c7214a7bf001d6a.tar.xz
c-stuff-5bbcb1f542c239ce1e9b5a7d3c7214a7bf001d6a.zip
More random stuff.
Diffstat (limited to 'split3.c')
-rw-r--r--split3.c76
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);
+}