forked from jwasham/practice-c
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
83 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
display/10i $eip | ||
|
||
break main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
#include "assert.h" | ||
#include "stdbool.h" | ||
#include "stdio.h" | ||
#include "stdlib.h" | ||
#include "string.h" | ||
|
||
bool reverseWords(char str[]); | ||
|
||
int main(int argc, char **argv) { | ||
char *s1 = "My kingdom for a horse."; | ||
reverseWords(s1); | ||
printf("%s\n", s1); | ||
|
||
return 0; | ||
} | ||
|
||
bool reverseWords(char str[]) { | ||
char *buffer; | ||
int slen, tokenBegin, tokenEnd, writePos, copyPos; | ||
|
||
slen = strlen(str); | ||
|
||
buffer = (char *)malloc(slen + 1); | ||
if (! buffer) | ||
return false; | ||
|
||
tokenBegin = tokenEnd = slen - 1; | ||
writePos = copyPos = 0; | ||
|
||
while (tokenBegin >= 0) { | ||
if (str[tokenBegin] == ' ') { | ||
buffer[writePos++] = str[tokenBegin--]; | ||
} else { | ||
while (tokenBegin >= 0 && str[tokenBegin] != ' ') | ||
--tokenBegin; | ||
copyPos = tokenBegin + 1; | ||
while (copyPos <= tokenEnd) | ||
buffer[writePos++] = str[copyPos++]; | ||
} | ||
} | ||
|
||
buffer[writePos] = '\0'; | ||
strlcpy(str, buffer, slen + 1); | ||
free(buffer); | ||
|
||
return true; | ||
} | ||
|
||
//bool reverseWords(char str[]) { | ||
// char *buffer; | ||
// int slen, tokenReadPos, wordReadPos, wordEnd, writePos = 0; | ||
// slen = strlen(str); | ||
// /* Position of the last character is length - 1 */ | ||
// tokenReadPos = slen - 1; | ||
// buffer = (char *)malloc(slen + 1); | ||
// | ||
// if (!buffer) return false; /* reverseWords failed */ | ||
// while (tokenReadPos >= 0) { | ||
// if (str[tokenReadPos] == ' ') { /* Non-word characters */ | ||
// /* Write character */ | ||
// buffer[writePos++] = str[tokenReadPos--]; | ||
// } else { /* Word characters */ | ||
// /* Store position of end of word */ | ||
// wordEnd = tokenReadPos; | ||
// /* Scan to next non-word character */ | ||
// while (tokenReadPos >= 0 && str[tokenReadPos] != ' ') tokenReadPos--; | ||
// /* tokenReadPos went past the start of the word */ | ||
// wordReadPos = tokenReadPos + 1; | ||
// /* Copy the characters of the word */ | ||
// while (wordReadPos <= wordEnd) { | ||
// buffer[writePos++] = str[wordReadPos++]; | ||
// } | ||
// } | ||
// } | ||
// /* null terminate buffer and copy over str */ | ||
// buffer[writePos] = '\0'; | ||
// strlcpy(str, buffer, slen + 1); | ||
// free(buffer); | ||
// return true; /* ReverseWords successful */ | ||
//} |