diff options
author | David Phillips <dbphillipsnz@gmail.com> | 2015-10-26 23:17:00 +1300 |
---|---|---|
committer | David Phillips <dbphillipsnz@gmail.com> | 2015-10-26 23:17:00 +1300 |
commit | b3dda0980bfa04a9041327ec5aad5c1845f0620f (patch) | |
tree | f38471a6556d18020e5d1364681f7b3ee1bca20a | |
download | odds-and-ends-b3dda0980bfa04a9041327ec5aad5c1845f0620f.tar.xz |
Initial commit
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | Makefile | 3 | ||||
-rw-r--r-- | config.mk | 1 | ||||
-rw-r--r-- | match_pool.c | 49 |
4 files changed, 55 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2450a3e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +match_pool +*.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a0e6cb9 --- /dev/null +++ b/Makefile @@ -0,0 +1,3 @@ +include config.mk + +all: match_pool diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..e8c9b31 --- /dev/null +++ b/config.mk @@ -0,0 +1 @@ +CFLAGS += -Wall -Wextra -Werror diff --git a/match_pool.c b/match_pool.c new file mode 100644 index 0000000..6df6af8 --- /dev/null +++ b/match_pool.c @@ -0,0 +1,49 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int main(int argc, char **argv) +{ + int i = 0; + char buffer[1024]; + char *res = NULL; + char *pool = NULL; + char *local_pool = NULL; + size_t pool_size = 0; + + + if (argc != 2) + { + fprintf(stderr, "Usage: %s <character pool>\n", argv[0]); + return EXIT_FAILURE; + } + + pool = argv[1]; + pool_size = strlen(pool); + + local_pool = malloc(pool_size); + if (local_pool == NULL) + { + fprintf(stderr, "%s: malloc for local pool failed\n", argv[0]); + return EXIT_FAILURE; + } + + while (fgets(buffer, sizeof(buffer), stdin)) + { + buffer[strcspn(buffer, "\r\n")] = '\0'; /* chomp */ + + if (strlen(buffer) == 0) + continue; + + strcpy(local_pool, pool); + for (i = strlen(buffer)-1; i >= 0; i--) + { + if ((res = memchr(local_pool, buffer[i], pool_size)) != NULL) + *res = '\0'; + else + break; + } + printf("%s %s\n", buffer, i < 0? "matches" : "doesn't match" ); + } + return 0; +} |