Edward Leno
Edward Leno

Reputation: 6327

Remove characters from a string in C

I only have access to 'C' and need to replace characters within a character array. I have not come up with any clean solutions for this relatively simple procedure.

I pass in a character array, for example:

char strBuffer[] = "/html/scorm12/course/course_index.jsp?user_id=100000232&course_id=100000879&course_prefix=ACQ&version=2&scorm_version=3&roster_id=100011365&course_name=Test%20Course%201.2&mode=browse&course_number=0000&mode_id=1";

I need to modify this buffer to replace all the & with &. The resulting buffer does not have to overwrite strBuffer (a new buffer can be created).

Any suggestions?

Edit:

In the past I have used the strstr() function in a loop, but was looking for a simpler solution, perhaps the C equivalent to the String.Replace() method.

Edit:

For my immediate needs, the following is all that I need.

char strBuffer[] = "/html/scorm12/course/course_index.jsp?user_id=100000232&course_id=100000879&course_prefix=ACQ&version=2&scorm_version=3&roster_id=100011365&course_name=Test%20Course%201.2&mode=browse&course_number=0000&mode_id=1";
char strTemp[1024];
char *s = (char*)strBuffer;
int i=0;

while (*s)
{
    strTemp[i++] = *s;
    if (strncmp(s,"&",5) == 0)
    {
        s += 5;
    }
    else
        s++;
}
strTemp[i] = 0;

Future modifications:

EDIT:

I created a blog post to detail the steps and provide a more flexible solution:

http://www.solutionmaniacs.com/blog/2012/11/25/c-removereplace-characters-in-a-string.html

Upvotes: 4

Views: 17782

Answers (4)

slashmais
slashmais

Reputation: 7155

char *s = (char*)strBuffer;
char sClean[strlen(strBuffer) + 1]; /* +1 for null-byte */
/* if above does not work in your compiler, use:
    char *sClean = (char*)malloc(sizeof(strBuffer) + 1);
*/
int i=0;
while (*s)
{
    sClean[i++]= *s;
    if ((*s == '&') && (!strncmp(s, "&", 5)) s += 5;
    else s++;
}
sClean[i] = 0;

Upvotes: 1

Chris Lutz
Chris Lutz

Reputation: 75479

C isn't noted for it's ease of use, especially when it comes to strings, but it has some rather nice standard library functions that will get the job done. If you need to work extensively on strings you'll probably need to know about pointers and pointer arithmetic, but otherwise here are some library functions that will undoubtedly help you:

  • strchr() to find a character (say, '&') in a string.
  • strcmp() and strncmp() to compare two strings.
  • strstr() to find a substring in a string (probably easier and faster than using the strchr()/strcmp() combination).
  • malloc() to allocate a new string.

Upvotes: 6

Brian R. Bondy
Brian R. Bondy

Reputation: 347586

Allocate another buffer, either on the stack or the heap, and then copy the string into the new buffer 1 character at a time. Make special handling when you encounter the & character.

Upvotes: 2

pmg
pmg

Reputation: 108986

Basically, you need to:

  • use the strstr() function to find the "&"s
  • copy characters to the resulting buffer up to the position found
  • skip 4 characters
  • repeat until NUL

Upvotes: 4

Related Questions