Problem:
Escape all % characters in a string; % is the escape character.
Example: “I’d like 2% milk” becomes “I’d like 2%% milk”.
Escape all % characters in a string; % is the escape character.
Example: “I’d like 2% milk” becomes “I’d like 2%% milk”.
I decided to make it work for any problematic character and to be replaced with any escape character that you should choose. Maybe I will create an amendment later that allows you pass an array of characters that each should be escaped.
I took on this problem because they specifically talked about how easy it would be in C++ or Java where string manipulation is MUCH more advanced and defined. In C you can't simply insert the escaped character because it isn't a string but a character array of a fixed size. This means that you are going to have to allocate the space for it.
Here is what I came up with:
#include <stdio.h> #include <string.h> // for malloc, in memory. * #include <stdlib.h> char *escapeString (char *origString, char badChar, char escapeChar) { int newStringLoc = 0; int toEscape = 0; // Determine number of characters we will need to allocate. for (int curChar = 0; origString[curChar] != '\0'; curChar++) if (origString[curChar] == badChar) toEscape++; char *newString = malloc (strlen(origString) + toEscape); // This really shouldn't happen in 2012... if (!newString) return NULL; for (int curChar = 0; origString[curChar] != '\0'; curChar++) { if (origString[curChar] != badChar) newString[newStringLoc] = origString[curChar]; else { newString[newStringLoc] = escapeChar; newString[++newStringLoc] = origString[curChar]; } newStringLoc++; } return newString; } int main(void) { char *origString = "This is a problematic string! 2%, 3%, 4%%!"; char *newString = escapeString (origString, '%', '\\'); // Check to see if it worked.. printf ("origString: %s\n newString: %s\n", origString, newString); free (newString); return 0; }
To make it much easier to see what is going on here, I have replaced the original escape character ('%') with ('\'). The output looks like this:
c:\CProgs\Str1-1>lcc strings1.c c:\CProgs\Str1-1>lcclnk strings1.obj c:\CProgs\Str1-1>strings1 origString: This is a problematic string! 2%, 3%, 4%%! newString: This is a problematic string! 2\%, 3\%, 4\%\%!
for (int curChar = 0; origString[curChar] != '\0'; toEscape += (origString[curChar++] == badChar));
No comments:
Post a Comment