summaryrefslogtreecommitdiff
path: root/reference/C/CONTRIB/SNIP/strrev.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/CONTRIB/SNIP/strrev.c')
-rwxr-xr-xreference/C/CONTRIB/SNIP/strrev.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/SNIP/strrev.c b/reference/C/CONTRIB/SNIP/strrev.c
new file mode 100755
index 0000000..20d9952
--- /dev/null
+++ b/reference/C/CONTRIB/SNIP/strrev.c
@@ -0,0 +1,37 @@
+/*
+** STRREV.C - reverse a string in place
+**
+** public domain by Bob Stout
+*/
+
+#include <string.h>
+
+char *strrev(char *str)
+{
+ char *p1, *p2;
+
+ if (! str || ! *str)
+ return str;
+ for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
+ {
+ *p1 ^= *p2;
+ *p2 ^= *p1;
+ *p1 ^= *p2;
+ }
+ return str;
+}
+
+#ifdef TEST
+
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+ while (--argc)
+ {
+ printf("\"%s\" backwards is ", *++argv);
+ printf("\"%s\"\n", strrev(*argv));
+ }
+}
+
+#endif /* TEST */