Well, Im board.. ;)
>
> char *delete_doubledollar(char *string)
> {
> char *read, *write;
>
> if ((write = strchr(string, '$')) == NULL)
> return string;
Point 'write' to the first occurance of a '$' in our string, if
there isn't one, then just return the original string.
>
> read = write;
(obviously) make read point to write which points to the first '$'
in our string. If there is a $$ then read and write will soon be NOT
pointing at the same location in memory.
>
> while (*read)
While *read is greater than a 0 (or '\0' end of string) ...
> if ((*(write++) = *(read++)) == '$')
> if (*read == '$')
> read++;
This is prolly where you get lost. What we are doing here is copying
what ever character that [read] is pointing at into the location that [write]
is pointing to, but if the character that [read] is pointing to is a '$', then
move [read] to the next character, in affect ignoring it rather than write it
back out... also, after we evaulate what is in [read] and [write], increment
them to the next location in the string, until we hit the end of the string
which should be terminated with a '\0' character (we hope, and 99.9% of the
time it is).
>
> *write = '\0';
Terminate the string...
>
> return string;
> }
And return the results...
One more time in case we lost someone:
We are accessing the string pointed to by 'string' and overwritting
what is there with a the same thing except we are ignoring the second '$'
characters. This is an easy way to remove the extra '$' characters without
having to bother allocating any temporary space, not that we need it when
we are removeing things from a string, just remember that we need to put
that terminator at the end, otherwise we would end up with the last char's
of the string duplicated at the end.
[This is a test string with $$ in it.]
Without a '\0' at the end our string would look like this:
[This is a test string with $ in it..]
If you wanted to take a string and, for ever $ put a $$ you would
then need to allocate a temporary chunk of memory larger than the one we
started with, perhaps (strlen(string) * 2) just in case. I wrote a func
called 'replace_string()' for the Mud that Im helping code on, and if
anyone would like it, I can post it... for that matter, I've wrote a number
of helper func's like that now. :)
Hope that explains that (in a long winded manner)... as I said,
Im bored. ;)
-Darrin
This archive was generated by hypermail 2b30 : 12/07/00 PST