aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2021-11-05 01:13:17 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2021-11-05 01:13:17 -0400
commite8db05f86e193e597abca60e997bb17a20a8e0e8 (patch)
tree95aecd1247d0bfb2ebad79ca6c96dba9deae2308
parentee8f52b3ae390ade051437373cd62112a76ad8ff (diff)
downloadjdtalkc-e8db05f86e193e597abca60e997bb17a20a8e0e8.tar.gz
Produce reversed strings
* Produce randomized word characters in strings
-rw-r--r--jdtalk.h2
-rw-r--r--main.c20
-rw-r--r--strings.c47
3 files changed, 67 insertions, 2 deletions
diff --git a/jdtalk.h b/jdtalk.h
index 5b37e7d..f28f3c8 100644
--- a/jdtalk.h
+++ b/jdtalk.h
@@ -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);
diff --git a/main.c b/main.c
index c04a4ad..be03113 100644
--- a/main.c
+++ b/main.c
@@ -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);
diff --git a/strings.c b/strings.c
index cc95600..f3bcb86 100644
--- a/strings.c
+++ b/strings.c
@@ -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;
+}