aboutsummaryrefslogtreecommitdiff
path: root/ch2/2-05_any-func.c
diff options
context:
space:
mode:
authorzlg <zlg@zlg.space>2013-03-27 05:00:43 -0500
committerzlg <zlg@zlg.space>2013-03-27 05:00:43 -0500
commit239a885d441cdb3585c42b594ed9e87b37b33c62 (patch)
treec37a632687906d0227eb775ee5fc3ba8ab26b606 /ch2/2-05_any-func.c
parentSolve Exercise 2-04: Squeeze v2 (diff)
downloadknr-239a885d441cdb3585c42b594ed9e87b37b33c62.tar.gz
knr-239a885d441cdb3585c42b594ed9e87b37b33c62.tar.bz2
knr-239a885d441cdb3585c42b594ed9e87b37b33c62.tar.xz
knr-239a885d441cdb3585c42b594ed9e87b37b33c62.zip
Solve Exercise 2-5: The any() function
Diffstat (limited to '')
-rw-r--r--ch2/2-05_any-func.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/ch2/2-05_any-func.c b/ch2/2-05_any-func.c
new file mode 100644
index 0000000..c515fab
--- /dev/null
+++ b/ch2/2-05_any-func.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+
+/* The C Programming Language: 2nd Edition
+ *
+ * Exercise 2-5: Write the function any(s1,s2), which returns the first
+ * location of the string s1 where any character from the string s2 occurs, or
+ * -1 if s1 contains no characters from s2. (The standard library function
+ * strpbrk does the same job but returns a pointer to the location.)
+ *
+ * Answer: Similarly to squeeze(), any() uses two loops to do its job, but
+ * instead of changing the string, we're just returning the index of the first
+ * character found. If it's not found, it'll return a negative number. This
+ * is a common practice in functions that return integers since it gives
+ * programmers an easy case to check for: if any() returns anything less than
+ * zero, the characters in s2 weren't found.
+ *
+ */
+
+int any(char s1[], char s2[]) {
+ int i, j;
+ for (i = j = 0; s1[i] != '\0'; ++i) {
+ while (s2[j++] != '\0') {
+ if (s1[i] == s2[j]) {
+ return i;
+ }
+ }
+ j = 0;
+ }
+ return -1;
+}
+
+int main() {
+ char foo[80] = "argle bargle";
+ char bar[80] = "toobz";
+ int result;
+
+ if ((result = any(foo, bar)) != -1) {
+ printf("Found a match at position %d!\n", result);
+ } else {
+ printf("No match found.\n");
+ }
+ // Should return a match at index 6.
+ return 0;
+}
> 2018-09-08Add remaining filters to vgstash packagezlg1-2/+11 2018-09-04Update LICENSE to match setup.pyzlg1-80/+67 2018-09-03Branch off from master with pytest, tox, clickzlg16-778/+779 2018-03-18Flesh out filter types and ownership statuszlg3-82/+144 2018-03-18README.mdown: break line correctlyzlg1-1/+1 2018-03-18add 'playlog' list filterzlg2-2/+9 2018-03-13Update helpers a bitzlg1-2/+9 2018-03-13Make VGSTASH_DB_LOCATION point to a filezlg2-21/+20 2016-11-18Remove settings from helpers.shZe Libertine Gamer1-5/+0 2016-11-15Correct phrasing in README.Ze Libertine Gamer1-4/+4 2016-11-13DerpZe Libertine Gamer1-0/+1 2016-11-03Improve error handling in shell scriptsZe Libertine Gamer4-3/+23 2016-10-24Correct run_again, add recursionZe Libertine Gamer1-0/+4 2016-10-21Add quotes to correct behavior for arglistZe Libertine Gamer1-1/+1 2016-10-14updater.sh: add recursion, error handlingZe Libertine Gamer1-43/+101 2016-10-14Correct pipe-handling behaviorZe Libertine Gamer1-1/+9 2016-10-12Clarify a method to move between platformsZe Libertine Gamer1-2/+5