From 999a2d4dcf3d918e37f76aae249b7b23f14bdd7d Mon Sep 17 00:00:00 2001 From: zlg Date: Fri, 22 Mar 2013 11:41:52 -0500 Subject: Solve Exercise 2-04: Squeeze v2 --- ch2/2-04_squeeze-v2.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 ch2/2-04_squeeze-v2.c diff --git a/ch2/2-04_squeeze-v2.c b/ch2/2-04_squeeze-v2.c new file mode 100644 index 0000000..2c3b56a --- /dev/null +++ b/ch2/2-04_squeeze-v2.c @@ -0,0 +1,51 @@ +#include + +/* The C Programming Language: 2nd Edition + * + * Exercise 2-4: Write an alternate version of squeeze(s1, s2) that deletes + * each character in s1 that matches any character in the string s2. + * + * Answer: This one is fairly easy, considering the fun trick that's covered + * in the passage before this exercise with the unary operators ++ and --. C's + * interesting behavior with these operators allows the programmer to write + * shorter, faster logic. + * + * That said, I couldn't find a way to iterate through s2[] and s1[] in a + * single loop, and I needed to use a flag. There may be a more clever way to + * solve this. + * + */ + +// It'd be better to make this return a pointer (or string), but the book +// hasn't covered it yet! +void squeeze(char s1[], char s2[]) { + int i, j, k, match; + + for (i = j = 0; s1[i] != '\0'; i++) { + // I don't see a way to do this without a flag + match = 0; + for (k = 0; s2[k] != '\0'; k++) { + if (s1[i] == s2[k]) { + match = 1; + break; + } + } + // check our flag. if there wasn't a match, j needs to match i's value + if (!match) { + s1[j++] = s1[i]; + } + } + + s1[j] = '\0'; +} + +int main() { + char foo[16] = "foobarbaz"; + char bar[16] = "boz"; + + squeeze(foo, bar); + + printf("%s\n", foo); // Should read "fara" + + return 0; +} -- cgit v1.2.3-70-g09d2 type='hidden' name='h' value='v0.3b6'/>
AgeCommit message (Expand)AuthorFilesLines
2018-10-18Bump to 0.3beta2 for PyPIzlg1-3/+3
2018-10-18vgstash.DB.__init__: fix error output formattingzlg1-1/+1
2018-10-18README: fix inline <code> formattingzlg1-3/+4
2018-10-18cli: show msg if game to be deleted is not in DBzlg2-2/+12
2018-10-18README: expand on usage, cover shell quotingzlg1-7/+99
2018-10-18cli: Tell the user when a game lacks noteszlg2-3/+15
2018-10-18Catch when an invalid list filter is passedzlg4-3/+24
2018-10-12cli: Add zero-game import/export messageszlg2-11/+18
2018-10-10Bump to 0.3beta1 for PyPIzlg1-1/+1
2018-10-10Move tests and data to dedicated directoryzlg7-10/+26
2018-10-10cli: Add "export" commandzlg2-5/+54
2018-10-10cli: Add "import" commandzlg5-1/+76
2018-10-09Bump to 0.3alpha6 for PyPIzlg1-1/+1
2018-10-09cli: Add "notes" commandzlg2-4/+74
2018-10-09update_game: ensure notes are also savedzlg1-2/+2
2018-10-09cli: add 'update' commandzlg3-20/+92
2018-10-06cli: Add "delete" commandzlg2-0/+19
2018-10-06Remove ID field from DBzlg3-38/+46
2018-10-06cli: change "Status" heading to "Progress"zlg2-36/+40
2018-09-29Bump to 0.3alpha5 for PyPIzlg1-1/+1
2018-09-29cli: Add pretty printing to 'list' commandzlg3-17/+107
2018-09-08setup.py: Bump to alpha4 for PyPIzlg1-1/+1
2018-09-08cli: add '--raw' option to list commandzlg2-9/+45
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