Re: ^Ms, easier solution correction!

From: Brain E. Mouse (rovegas@cs.nmsu.edu)
Date: 11/27/95


On Mon, 27 Nov 1995, Chaotic wrote:

> On Sun, 26 Nov 1995 myers@indy.net wrote:
> 
> > > you don't need to return anything... do the string in place:
> > > 
> > > [........................ snip .........................]
> > > 
> > > void remove_CRs(char *string)
> > > {
> > >     register char *ptr;
> > > 
> > >     ptr = string;
> > >     do {
> > >         if (*string != '\r') 
> > >             *ptr++ == *string;
> > 		         ^^
> > 		
> > >         ++string;
> > >     } while(*string);
> > > }
> > > 
> > > [......................... snip .........................]
> > > 
> > > this does it all, including placing the endmark on the string.  it's also 
> > > compact and FAST.  caveat: untested, but guaranteed to work. :)
                                           ^^^^^^^^^^^^^^^^^^^^^^
> > 
> >   Really ;)
> > 
> > Sorry, could not resist. ;)
> 
> i don't blame you, i would have responded also.  makes me glad i added 
> the caveat though.  :)

  Although, you shouldn't have put that guarantee in there...

> however, i don't think you can make it much faster.  those functions 
> using calls to strtok() would have been sloooOOOooow.
> 
> Lauren
> 
  Wouldn't it depend on how many \r's there were in the line though? I
mean, if there's only one then the speed difference should be marginal,
right? But that's beside the fact that your function does 2 things wrong. 
First, it overwrites the original string so you can't use it to output 
to the mud anymore. And second, well, it doesn't work. :P  I had a feeling 
so I tested it out with the following:

[----remove_CRs.c----]

#include <stdio.h>

void remove_CRs(char *string);

main()
{
  char string[] = "this\r i\rs a \rtes\rt\r";
  FILE *fp;

  fp = fopen("remove_CRs.test", "w");
  fprintf(fp, "%s", string);

  remove_CRs(string);

  fprintf(fp, "\n\n%s", string);
  fclose(fp);
}

void remove_CRs(char *string)
{
    register char *ptr;

    ptr = string;
    do {
        if (*string != '\r') 
            *ptr++ = *string;
        ++string;
    } while(*string);
}

[----End of file----]

Notice: I didn't touch your function except to fix the == thing.

This is the output file:
[----remove_CRs.test----]

this
 i
s a 
tes
t

this is a testes
t

[----End of file----]

So unless I did something wrong, this thing needs to go back to the 
drawing board. So much for the "guarantee"... I WANT MY MONEY BACK! What? 
Oh, nevermind. I forgot it was free. You don't happen to work for 
Macro$oft do you? (No, I'm sorry. I'm just a little resentful cause you 
put down my nice little program like it was a piece of garbage! :(
Godfunit... Hey, I only spent 5 mins on the damn thing--and I wasn't 
claiming it was the best, either.)

Windoze'95: I can't get no satisfaction, cause I try, and I try, and I try...



This archive was generated by hypermail 2b30 : 12/07/00 PST