diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2021-11-05 01:13:17 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2021-11-05 01:13:17 -0400 |
commit | e8db05f86e193e597abca60e997bb17a20a8e0e8 (patch) | |
tree | 95aecd1247d0bfb2ebad79ca6c96dba9deae2308 | |
parent | ee8f52b3ae390ade051437373cd62112a76ad8ff (diff) | |
download | jdtalkc-e8db05f86e193e597abca60e997bb17a20a8e0e8.tar.gz |
Produce reversed strings
* Produce randomized word characters in strings
-rw-r--r-- | jdtalk.h | 2 | ||||
-rw-r--r-- | main.c | 20 | ||||
-rw-r--r-- | strings.c | 47 |
3 files changed, 67 insertions, 2 deletions
@@ -46,6 +46,8 @@ char *str_random_case(char *s); char *str_hill_case(char *s); char *str_leet(char *s); char *str_title_case(char *s); +char *str_randomize_words(char *s); +char *str_reverse(char *s); char *talkf(struct Dictionary *dict, const char *fmt, char **parts); char *talk_salad(struct Dictionary *dict, size_t limit, char **parts); @@ -12,7 +12,9 @@ static const char *usage_text = \ " -H Produce hill-cased strings (hIlL cAsE)\n" " -l Produce leet speak strings (1337 5|*34|<)\n" " -r Produce random-case strings (raNdoM CasE)\n" + " -R Produce reversed strings (sgnirts desrever)\n" " -s num Produce word salad (`num` words per line)\n" + " -S Produce shuffled strings (fsfhleudf sntsrgi)\n" " -t Produce title-case strings (Title Case)\n" "\n"; @@ -49,6 +51,8 @@ int main(int argc, char *argv[]) { int do_benchmark; int do_title_case; int salad_limit; + int do_shuffle; + int do_reverse; size_t limit; float start_time; float end_time; @@ -63,6 +67,8 @@ int main(int argc, char *argv[]) { do_salad = 0; do_benchmark = 0; do_title_case = 0; + do_shuffle = 0; + do_reverse = 0; limit = 0; salad_limit = 10; @@ -116,6 +122,12 @@ int main(int argc, char *argv[]) { if (strcmp(argv[i], "-t") == 0) { do_title_case = 1; } + if (strcmp(argv[i], "-S") == 0) { + do_shuffle = 1; + } + if (strcmp(argv[i], "-R") == 0) { + do_reverse = 1; + } } dict = dictionary_populate(); @@ -134,7 +146,6 @@ int main(int argc, char *argv[]) { start_time = (float)clock() / CLOCKS_PER_SEC; for (size_t i = 1; ; i++) { - LABEL_TRY_AGAIN: memset(part, 0, sizeof(part) / sizeof(*part) * sizeof(char *)); if (do_salad) { @@ -161,7 +172,8 @@ int main(int argc, char *argv[]) { } } if (!found) { - goto LABEL_TRY_AGAIN; + i--; + continue; } } @@ -173,6 +185,10 @@ int main(int argc, char *argv[]) { strcpy(buf, str_leet(buf)); } else if (do_title_case) { str_title_case(buf); + } else if (do_shuffle) { + str_randomize_words(buf); + } else if (do_reverse) { + str_reverse(buf); } puts(buf); @@ -155,3 +155,50 @@ char *str_title_case(char *s) { } return s; } + +char *str_randomize(char *s) { + size_t len; + char tmp = 0; + len = strlen(s); + for (size_t i = len - 1; i > 0; i--) { + size_t from = random() % i + 1; + tmp = s[from]; + s[from] = s[i]; + s[i] = tmp; + } + return s; +} + +char *str_randomize_words(char *s) { + char old[OUTPUT_SIZE_MAX]; + char buf[OUTPUT_SIZE_MAX]; + char *oldp; + char *word; + + strcpy(old, s); + oldp = old; + memset(buf, '\0', sizeof(buf)); + size_t len = strlen(s); + + while ((word = strsep(&oldp, " ")) != NULL) { + str_randomize(word); + strcat(buf, word); + strcat(buf, " "); + } + strncpy(s, buf, len); + return s; +} + +char *str_reverse(char *s) { + size_t dest; + char buf[1024]; + buf[0] = '\0'; + + dest = 0; + for (size_t src = strlen(s); src > 0; src--, dest++) { + buf[dest] = s[src - 1]; + } + buf[dest] = '\0'; + strcpy(s, buf); + return s; +} |