PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > comp.lang.c > Missing removeStr and substr function
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Missing removeStr and substr function

Réponse
 
LinkBack Outils de la discussion
Vieux 26/11/2007, 18h05   #1
tfelb
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Missing removeStr and substr function

Hi all!

I bought the book "Programming in C" by Stephen G Kochan. I miss 2
answers at his website.
(removestr and the substr function) How can I implement these
functions? It would be wonderful if someone can me out, because
Stephen Kochan is not reachable.

Thanks for any

T. Felb

  Réponse avec citation
Vieux 26/11/2007, 18h13   #2
Lew Pitcher
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Nov 26, 1:05 pm, tfelb <tomico...@gmail.com> wrote:
> Hi all!
>
> I bought the book "Programming in C" by Stephen G Kochan. I miss 2
> answers at his website.
> (removestr and the substr function) How can I implement these
> functions? It would be wonderful if someone can me out, because
> Stephen Kochan is not reachable.



While I'm not familiar with Mr. Kochan's book or his functions, I can
guess how they might be implemented. In fact, unless Mr. Kochan has
dictated some sort of convoluted processing requirement, both
functions should be simple to the point of being obvious to anyone
with even a small amount of experience with C, character arrays, and
the definition of a string.

Why don't you post the requirements for both of these functions, and
the code you've written so far, and we'll see if we can assist you in
getting it right.



  Réponse avec citation
Vieux 26/11/2007, 18h20   #3
tfelb
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On 26 Nov., 19:13, Lew Pitcher <lpitc...@teksavvy.com> wrote:
> On Nov 26, 1:05 pm, tfelb <tomico...@gmail.com> wrote:
>
> > Hi all!

>
> > I bought the book "Programming in C" by Stephen G Kochan. I miss 2
> > answers at his website.
> > (removestr and the substr function) How can I implement these
> > functions? It would be wonderful if someone can me out, because
> > Stephen Kochan is not reachable.

>
> While I'm not familiar with Mr. Kochan's book or his functions, I can
> guess how they might be implemented. In fact, unless Mr. Kochan has
> dictated some sort of convoluted processing requirement, both
> functions should be simple to the point of being obvious to anyone
> with even a small amount of experience with C, character arrays, and
> the definition of a string.
>
> Why don't you post the requirements for both of these functions, and
> the code you've written so far, and we'll see if we can assist you in
> getting it right.


These are the functions of Stephen G Kochan posted on his website, but
to answer my book questions I miss the substr and removestr function
to understand how these functions are implemented.

int findString (const char source[], const char s[])
{
int i, j, foundit = false;

// try each character in source

for ( i = 0; source[i] != '\0' && !foundit; ++i ) {
foundit = true;

// now see if corresponding chars from s match

for ( j = 0; s[j] != '\0' && foundit; ++j )
if ( source[j + i] != s[j] || source[j + i] == '\0' )
foundit = false;

if (foundit)
return i;
}

return -1;
}



10-7
/* insert string s into string source starting at i
This function uses the stringLength function defined
in the chapter.

Note: this function assumes source is big enough
to store the inserted string (dangerous!) */

void insertString (char source[], char s[], int i)
{
int j, lenS, lenSource;

/* first, find out how big the two strings are */

lenSource = stringLength (source);
lenS = stringLength (s);

/* sanity check here -- note that i == lenSource
effectively concatenates s onto the end of source */

if (i > lenSource)
return;

/* now we have to move the characters in source
down from the insertion point to make room for s.
Note that we copy the string starting from the end
to avoid overwriting characters in source.
We also copy the terminating null (j starts at lenS)
as well since the final result must be null-terminated */

for ( j = lenSource; j >= i; --j )
source [lenS + j] = source [j];

/* we've made room, now copy s into source at the
insertion point */

for ( j = 0; j < lenS; ++j )
source [j + i] = s[j];
}



10-9
bool replaceString (char source [], char s1[], char s2[])
{
int index;

// first locate s1 inside the source

index = findString (source, s1);

if ( index == -1 )
return false;

// now delete s1 from the source

removeString (source, index, stringLength (s1));

// now insert the new string

insertString (source, s2, index);

return true;
}

  Réponse avec citation
Vieux 26/11/2007, 20h17   #4
Martin Ambuhl
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

tfelb wrote:
> Hi all!
>
> I bought the book "Programming in C" by Stephen G Kochan. I miss 2
> answers at his website.
> (removestr and the substr function) How can I implement these
> functions? It would be wonderful if someone can me out, because
> Stephen Kochan is not reachable.


A simple Google search yields
<http://csourcesearch.net/package/fk/0.6.7/fk-0.6.7/lib/removestr.c>
<http://www.koders.com/c/fid88DBABDF4CD01D6FBE11E7B5CB60CC2BEA98E60B.aspx>

I have made no effort to check the quality of the code.
In any case, comp.lang.c is not a sources-wanted newsgroup, and there
_are_ such newsgroups. Try one.
  Réponse avec citation
Vieux 26/11/2007, 20h19   #5
Martin Ambuhl
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

tfelb wrote:
> Hi all!
>
> I bought the book "Programming in C" by Stephen G Kochan. I miss 2
> answers at his website.
> (removestr and the substr function) How can I implement these
> functions? It would be wonderful if someone can me out, because
> Stephen Kochan is not reachable.


Did you try <mailto:steve@kochan-wood.com> as
<http://www.kochan-wood.com/AboutUs.htm> suggests?
  Réponse avec citation
Vieux 26/11/2007, 20h32   #6
Lew Pitcher
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Nov 26, 1:20 pm, tfelb <tomico...@gmail.com> wrote:
> On 26 Nov., 19:13, Lew Pitcher <lpitc...@teksavvy.com> wrote:
>
>
>
> > On Nov 26, 1:05 pm, tfelb <tomico...@gmail.com> wrote:

>
> > > Hi all!

>
> > > I bought the book "Programming in C" by Stephen G Kochan. I miss 2
> > > answers at his website.
> > > (removestr and the substr function) How can I implement these
> > > functions? It would be wonderful if someone can me out, because
> > > Stephen Kochan is not reachable.

>
> > While I'm not familiar with Mr. Kochan's book or his functions, I can
> > guess how they might be implemented. In fact, unless Mr. Kochan has
> > dictated some sort of convoluted processing requirement, both
> > functions should be simple to the point of being obvious to anyone
> > with even a small amount of experience with C, character arrays, and
> > the definition of a string.

>
> > Why don't you post the requirements for both of these functions, and
> > the code you've written so far, and we'll see if we can assist you in
> > getting it right.

>
> These are the functions of Stephen G Kochan posted on his website, but
> to answer my book questions I miss the substr and removestr function
> to understand how these functions are implemented.
>
> int findString (const char source[], const char s[])
> {
> int i, j, foundit = false;
>
> // try each character in source
>
> for ( i = 0; source[i] != '\0' && !foundit; ++i ) {
> foundit = true;
>
> // now see if corresponding chars from s match
>
> for ( j = 0; s[j] != '\0' && foundit; ++j )
> if ( source[j + i] != s[j] || source[j + i] == '\0' )
> foundit = false;
>
> if (foundit)
> return i;
> }
>
> return -1;
>
> }

[snip]

Well, it appears that findString() is a workable substitute for the
missing substr() function. So, one down and one to go.

As I said, it is trivially easy to write these two functions. Now that
you have substr() (or it's equivalent), think of how you would delete
a substring from a string. Here's how I would do it: I'd start moving
characters from beyond the right end of the substring to the left
positions of the substring, until I run out of string.

take from here
! A ! B ! C ! D ! E ! F ! G ! \0 !
^ :
'-----------'
and move to here, until you move the \0

You are left with...

! A ! E ! F ! G ! \0 ! ! ! !

thus deleting the substring "BCD" from the string "ABCDEFG"

Now, go code that program
  Réponse avec citation
Vieux 26/11/2007, 21h53   #7
CBFalconer
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

tfelb wrote:
> Lew Pitcher <lpitc...@teksavvy.com> wrote:
>> tfelb <tomico...@gmail.com> wrote:
>>
>>> I bought the book "Programming in C" by Stephen G Kochan. I miss
>>> 2 answers at his website. (removestr and the substr function)
>>> How can I implement these functions? It would be wonderful if
>>> someone can me out, because Stephen Kochan is not reachable.

>>

.... snip ...
>>
>> Why don't you post the requirements for both of these functions,
>> and the code you've written so far, and we'll see if we can
>> assist you in getting it right.

>
> These are the functions of Stephen G Kochan posted on his website,
> but to answer my book questions I miss the substr and removestr
> function to understand how these functions are implemented.
>
> int findString (const char source[], const char s[])

.... snip much code ...

You posted all that but didn't bother to answer Lews question.
Describe, in detail, what those functions (substr and removestr)
do. Include a complete prototype.


--
Chuck F (cbfalconer at maineline dot net)
<http://cbfalconer.home.att.net>
Try the download section.



--
Posted via a free Usenet account from http://www.teranews.com

  Réponse avec citation
Vieux 27/11/2007, 15h08   #8
tfelb
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On 26 Nov., 22:53, CBFalconer <cbfalco...@yahoo.com> wrote:
> tfelb wrote:
> > Lew Pitcher <lpitc...@teksavvy.com> wrote:
> >> tfelb <tomico...@gmail.com> wrote:

>
> >>> I bought the book "Programming in C" by Stephen G Kochan. I miss
> >>> 2 answers at his website. (removestr and the substr function)
> >>> How can I implement these functions? It would be wonderful if
> >>> someone can me out, because Stephen Kochan is not reachable.

>
> ... snip ...
>
> >> Why don't you post the requirements for both of these functions,
> >> and the code you've written so far, and we'll see if we can
> >> assist you in getting it right.

>
> > These are the functions of Stephen G Kochan posted on his website,
> > but to answer my book questions I miss the substr and removestr
> > function to understand how these functions are implemented.

>
> > int findString (const char source[], const char s[])

>
> ... snip much code ...
>
> You posted all that but didn't bother to answer Lews question.
> Describe, in detail, what those functions (substr and removestr)
> do. Include a complete prototype.
>
> --
> Chuck F (cbfalconer at maineline dot net)
> <http://cbfalconer.home.att.net>
> Try the download section.
>
> --
> Posted via a free Usenet account fromhttp://www.teranews.com- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -


Thanks for all!
  Réponse avec citation
Vieux 02/12/2007, 15h56   #9
tfelb
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On 27 Nov., 16:08, tfelb <tomico...@gmail.com> wrote:
> On 26 Nov., 22:53, CBFalconer <cbfalco...@yahoo.com> wrote:
>
>
>
>
>
> > tfelb wrote:
> > > Lew Pitcher <lpitc...@teksavvy.com> wrote:
> > >> tfelb <tomico...@gmail.com> wrote:

>
> > >>> I bought the book "Programming in C" by Stephen G Kochan. I miss
> > >>> 2 answers at his website. (removestr and the substr function)
> > >>> How can I implement these functions? It would be wonderful if
> > >>> someone can me out, because Stephen Kochan is not reachable.

>
> > ... snip ...

>
> > >> Why don't you post the requirements for both of these functions,
> > >> and the code you've written so far, and we'll see if we can
> > >> assist you in getting it right.

>
> > > These are the functions of Stephen G Kochan posted on his website,
> > > but to answer my book questions I miss the substr and removestr
> > > function to understand how these functions are implemented.

>
> > > int findString (const char source[], const char s[])

>
> > ... snip much code ...

>
> > You posted all that but didn't bother to answer Lews question.
> > Describe, in detail, what those functions (substr and removestr)
> > do. Include a complete prototype.

>
> > --
> > Chuck F (cbfalconer at maineline dot net)
> > <http://cbfalconer.home.att.net>
> > Try the download section.

>
> > --
> > Posted via a free Usenet account fromhttp://www.teranews.com-Zitierten Text ausblenden -

>
> > - Zitierten Text anzeigen -

>
> Thanks for all!- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -


I coded the substring function and it works fine but I have problems
with the removestr function. I want to code this function without any
pointers. I'm not sure how can I delete a char in C because '\0' is
the end of each string and it terminates the string. I tried to set
dst[i] = ""; but then I got an errormessage "warning: assignment makes
integer from pointer without a cast", so "" doesn't work.

Thanks for any !

Tom

Prototyp: void removestr(char [], char [])

Use:

char string[100] = "This is a text\n";
removestr(string,"This");
printf("%s",string) /* the result should be "is a text" */


void removestr (char dst[], char find[])
{
int i,l;
for(i = 0, l = 0; dst[i] != '\0' && find[l] != '\0'; i++, l++)
if(dst[i] == find[l])
{
dst[i] = '\0'; /* I think here is the problem because it terminates
the whole dst */
}
dst[i] = '\0';
}

  Réponse avec citation
Vieux 03/12/2007, 15h08   #10
Lew Pitcher
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Dec 2, 10:56 am, tfelb <tomico...@gmail.com> wrote:
> On 27 Nov., 16:08, tfelb <tomico...@gmail.com> wrote:
>
>
>
> > On 26 Nov., 22:53, CBFalconer <cbfalco...@yahoo.com> wrote:

>
> > > tfelb wrote:
> > > > Lew Pitcher <lpitc...@teksavvy.com> wrote:
> > > >> tfelb <tomico...@gmail.com> wrote:

>
> > > >>> I bought the book "Programming in C" by Stephen G Kochan. I miss
> > > >>> 2 answers at his website. (removestr and the substr function)
> > > >>> How can I implement these functions? It would be wonderful if
> > > >>> someone can me out, because Stephen Kochan is not reachable.

>
> > > ... snip ...

>
> > > >> Why don't you post the requirements for both of these functions,
> > > >> and the code you've written so far, and we'll see if we can
> > > >> assist you in getting it right.

>
> > > > These are the functions of Stephen G Kochan posted on his website,
> > > > but to answer my book questions I miss the substr and removestr
> > > > function to understand how these functions are implemented.

>
> > > > int findString (const char source[], const char s[])

>
> > > ... snip much code ...

>
> > > You posted all that but didn't bother to answer Lews question.
> > > Describe, in detail, what those functions (substr and removestr)
> > > do. Include a complete prototype.

>
> > > --
> > > Chuck F (cbfalconer at maineline dot net)
> > > <http://cbfalconer.home.att.net>
> > > Try the download section.

>
> > > --
> > > Posted via a free Usenet account fromhttp://www.teranews.com-ZitiertenText ausblenden -

>
> > > - Zitierten Text anzeigen -

>
> > Thanks for all!- Zitierten Text ausblenden -

>
> > - Zitierten Text anzeigen -

>
> I coded the substring function and it works fine but I have problems
> with the removestr function. I want to code this function without any
> pointers. I'm not sure how can I delete a char in C because '\0' is
> the end of each string and it terminates the string. I tried to set
> dst[i] = ""; but then I got an errormessage "warning: assignment makes
> integer from pointer without a cast", so "" doesn't work.
>
> Thanks for any !
>
> Tom
>
> Prototyp: void removestr(char [], char [])
>
> Use:
>
> char string[100] = "This is a text\n";
> removestr(string,"This");
> printf("%s",string) /* the result should be "is a text" */
>
> void removestr (char dst[], char find[])
> {
> int i,l;
> for(i = 0, l = 0; dst[i] != '\0' && find[l] != '\0'; i++, l++)
> if(dst[i] == find[l])
> {
> dst[i] = '\0'; /* I think here is the problem because it terminates
> the whole dst */
>
> }
> dst[i] = '\0';
> }



OK, well you really missed the idea, didn't you? ;-)

I'm not even going to attempt to fix your immediate problem in
this code, as this code does not now (and likely never will) answer
the requirement of deleting an arbitrary substring from an arbitrary
string.

So, lets start at the beginning; here's how I would delete an
arbitrary substring from an arbitrary string:

1) locate and note the beginning of the substring in the string - If
not found then exit
2) locate and note the first character following the substring in the
string
3) for each character in the substring,
copy the character following the substring (point 2) over the
character in the substring (point 1)
move forward one character in the substring (point 1)
move forward one character following the substring (point 2)


void removestr(char *dst, char *find)
{
char *start, *end;
if (!(start = end = substring(dst,find))) return; /* exit if the
substring cant be found */

while (*find) {++find; ++end;} /* advance
past substring */
while (*end) {*start = *end; ++start; ++end;} /* copy
remainder over substring */
}

HTH
--
Lew
  Réponse avec citation
Vieux 03/12/2007, 15h13   #11
Lew Pitcher
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Dec 3, 10:08 am, Lew Pitcher <lpitc...@teksavvy.com> wrote:
> On Dec 2, 10:56 am, tfelb <tomico...@gmail.com> wrote:
>
>
>
> > On 27 Nov., 16:08, tfelb <tomico...@gmail.com> wrote:

>
> > > On 26 Nov., 22:53, CBFalconer <cbfalco...@yahoo.com> wrote:

>
> > > > tfelb wrote:
> > > > > Lew Pitcher <lpitc...@teksavvy.com> wrote:
> > > > >> tfelb <tomico...@gmail.com> wrote:

>
> > > > >>> I bought the book "Programming in C" by Stephen G Kochan. I miss
> > > > >>> 2 answers at his website. (removestr and the substr function)
> > > > >>> How can I implement these functions? It would be wonderful if
> > > > >>> someone can me out, because Stephen Kochan is not reachable.

>
> > > > ... snip ...

>
> > > > >> Why don't you post the requirements for both of these functions,
> > > > >> and the code you've written so far, and we'll see if we can
> > > > >> assist you in getting it right.

>
> > > > > These are the functions of Stephen G Kochan posted on his website,
> > > > > but to answer my book questions I miss the substr and removestr
> > > > > function to understand how these functions are implemented.

>
> > > > > int findString (const char source[], const char s[])

>
> > > > ... snip much code ...

>
> > > > You posted all that but didn't bother to answer Lews question.
> > > > Describe, in detail, what those functions (substr and removestr)
> > > > do. Include a complete prototype.

>
> > > > --
> > > > Chuck F (cbfalconer at maineline dot net)
> > > > <http://cbfalconer.home.att.net>
> > > > Try the download section.

>
> > > > --
> > > > Posted via a free Usenet account fromhttp://www.teranews.com-ZitiertenTextausblenden -

>
> > > > - Zitierten Text anzeigen -

>
> > > Thanks for all!- Zitierten Text ausblenden -

>
> > > - Zitierten Text anzeigen -

>
> > I coded the substring function and it works fine but I have problems
> > with the removestr function. I want to code this function without any
> > pointers. I'm not sure how can I delete a char in C because '\0' is
> > the end of each string and it terminates the string. I tried to set
> > dst[i] = ""; but then I got an errormessage "warning: assignment makes
> > integer from pointer without a cast", so "" doesn't work.

>
> > Thanks for any !

>
> > Tom

>
> > Prototyp: void removestr(char [], char [])

>
> > Use:

>
> > char string[100] = "This is a text\n";
> > removestr(string,"This");
> > printf("%s",string) /* the result should be "is a text" */

>
> > void removestr (char dst[], char find[])
> > {
> > int i,l;
> > for(i = 0, l = 0; dst[i] != '\0' && find[l] != '\0'; i++, l++)
> > if(dst[i] == find[l])
> > {
> > dst[i] = '\0'; /* I think here is the problem because it terminates
> > the whole dst */

>
> > }
> > dst[i] = '\0';
> > }

>
> OK, well you really missed the idea, didn't you? ;-)
>
> I'm not even going to attempt to fix your immediate problem in
> this code, as this code does not now (and likely never will) answer
> the requirement of deleting an arbitrary substring from an arbitrary
> string.
>
> So, lets start at the beginning; here's how I would delete an
> arbitrary substring from an arbitrary string:
>
> 1) locate and note the beginning of the substring in the string - If
> not found then exit
> 2) locate and note the first character following the substring in the
> string
> 3) for each character in the substring,
> copy the character following the substring (point 2) over the
> character in the substring (point 1)
> move forward one character in the substring (point 1)
> move forward one character following the substring (point 2)
>
> void removestr(char *dst, char *find)
> {
> char *start, *end;
> if (!(start = end = substring(dst,find))) return; /* exit if the
> substring cant be found */
>
> while (*find) {++find; ++end;} /* advance
> past substring */
> while (*end) {*start = *end; ++start; ++end;} /* copy
> remainder over substring */
>
> }
>
> HTH
> --
> Lew


Oops... gotta fix that boundary condition, don't I? ;-)

void removestr(char *dst, char *find)
{
char *start, *end;
if (!(start = end = substring(dst,find)))
return; /* exit if cant find substring */

while (*find)
{++find; ++end;} /* advance past substring */
while (*start = *end)
{++start; ++end;} /* copy remainder over substring */

}
  Réponse avec citation
Vieux 04/12/2007, 13h12   #12
tfelb
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Dec 3, 4:13 pm, Lew Pitcher <lpitc...@teksavvy.com> wrote:
> On Dec 3, 10:08 am, Lew Pitcher <lpitc...@teksavvy.com> wrote:
>
>
>
>
>
> > On Dec 2, 10:56 am, tfelb <tomico...@gmail.com> wrote:

>
> > > On 27 Nov., 16:08, tfelb <tomico...@gmail.com> wrote:

>
> > > > On 26 Nov., 22:53, CBFalconer <cbfalco...@yahoo.com> wrote:

>
> > > > > tfelb wrote:
> > > > > > Lew Pitcher <lpitc...@teksavvy.com> wrote:
> > > > > >> tfelb <tomico...@gmail.com> wrote:

>
> > > > > >>> I bought the book "Programming in C" by Stephen G Kochan. I miss
> > > > > >>> 2 answers at his website. (removestr and the substr function)
> > > > > >>> How can I implement these functions? It would be wonderful if
> > > > > >>> someone can me out, because Stephen Kochan is not reachable.

>
> > > > > ... snip ...

>
> > > > > >> Why don't you post the requirements for both of these functions,
> > > > > >> and the code you've written so far, and we'll see if we can
> > > > > >> assist you in getting it right.

>
> > > > > > These are the functions of Stephen G Kochan posted on his website,
> > > > > > but to answer my book questions I miss the substr and removestr
> > > > > > function to understand how these functions are implemented.

>
> > > > > > int findString (const char source[], const char s[])

>
> > > > > ... snip much code ...

>
> > > > > You posted all that but didn't bother to answer Lews question.
> > > > > Describe, in detail, what those functions (substr and removestr)
> > > > > do. Include a complete prototype.

>
> > > > > --
> > > > > Chuck F (cbfalconer at maineline dot net)
> > > > > <http://cbfalconer.home.att.net>
> > > > > Try the download section.

>
> > > > > --
> > > > > Posted via a free Usenet account fromhttp://www.teranews.com-ZitiertenTextausblenden-

>
> > > > > - Zitierten Text anzeigen -

>
> > > > Thanks for all!- Zitierten Text ausblenden -

>
> > > > - Zitierten Text anzeigen -

>
> > > I coded the substring function and it works fine but I have problems
> > > with the removestr function. I want to code this function without any
> > > pointers. I'm not sure how can I delete a char in C because '\0' is
> > > the end of each string and it terminates the string. I tried to set
> > > dst[i] = ""; but then I got an errormessage "warning: assignment makes
> > > integer from pointer without a cast", so "" doesn't work.

>
> > > Thanks for any !

>
> > > Tom

>
> > > Prototyp: void removestr(char [], char [])

>
> > > Use:

>
> > > char string[100] = "This is a text\n";
> > > removestr(string,"This");
> > > printf("%s",string) /* the result should be "is a text" */

>
> > > void removestr (char dst[], char find[])
> > > {
> > > int i,l;
> > > for(i = 0, l = 0; dst[i] != '\0' && find[l] != '\0'; i++, l++)
> > > if(dst[i] == find[l])
> > > {
> > > dst[i] = '\0'; /* I think here is the problem because it terminates
> > > the whole dst */

>
> > > }
> > > dst[i] = '\0';
> > > }

>
> > OK, well you really missed the idea, didn't you? ;-)

>
> > I'm not even going to attempt to fix your immediate problem in
> > this code, as this code does not now (and likely never will) answer
> > the requirement of deleting an arbitrary substring from an arbitrary
> > string.

>
> > So, lets start at the beginning; here's how I would delete an
> > arbitrary substring from an arbitrary string:

>
> > 1) locate and note the beginning of the substring in the string - If
> > not found then exit
> > 2) locate and note the first character following the substring in the
> > string
> > 3) for each character in the substring,
> > copy the character following the substring (point 2) over the
> > character in the substring (point 1)
> > move forward one character in the substring (point 1)
> > move forward one character following the substring (point 2)

>
> > void removestr(char *dst, char *find)
> > {
> > char *start, *end;
> > if (!(start = end = substring(dst,find))) return; /* exit if the
> > substring cant be found */

>
> > while (*find) {++find; ++end;} /* advance
> > past substring */
> > while (*end) {*start = *end; ++start; ++end;} /* copy
> > remainder over substring */

>
> > }

>
> > HTH
> > --
> > Lew

>
> Oops... gotta fix that boundary condition, don't I? ;-)
>
> void removestr(char *dst, char *find)
> {
> char *start, *end;
> if (!(start = end = substring(dst,find)))
> return; /* exit if cant find substring */
>
> while (*find)
> {++find; ++end;} /* advance past substring */
> while (*start = *end)
> {++start; ++end;} /* copy remainder over substring */
>
>
>
> }- Hide quoted text -
>
> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -


Oh THANK YOU very much! Overwriting is the solution.

Tom
  Réponse avec citation
Vieux 06/12/2007, 02h47   #13
Barry Schwarz
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Sun, 2 Dec 2007 07:56:54 -0800 (PST), tfelb <tomicoder@gmail.com>
wrote:

snip

>I coded the substring function and it works fine but I have problems
>with the removestr function. I want to code this function without any
>pointers. I'm not sure how can I delete a char in C because '\0' is
>the end of each string and it terminates the string. I tried to set
>dst[i] = ""; but then I got an errormessage "warning: assignment makes
>integer from pointer without a cast", so "" doesn't work.
>
>Thanks for any !
>
>Tom
>
>Prototyp: void removestr(char [], char [])
>
>Use:
>
>char string[100] = "This is a text\n";
>removestr(string,"This");


There is no space after the This, so

>printf("%s",string) /* the result should be "is a text" */


the result should be " is a text\n".

>
>
>void removestr (char dst[], char find[])


You say you don't want to use pointers. Are you aware that when an
array is passed into a function, the array argument is converted to a
pointer to the first element. Your calling statement is identical to
removestr(&string[0], "This");
If it were legal syntax, "This" could be replaced with &"This"[0].

>{
>int i,l;
>for(i = 0, l = 0; dst[i] != '\0' && find[l] != '\0'; i++, l++)
>if(dst[i] == find[l])
>{
> dst[i] = '\0'; /* I think here is the problem because it terminates
>the whole dst */
>}


If dst[0] != find[0], you increment both i and l. Your next iteration
through the loop will test dst[1] and find[1] but you should be
checking dst[1] and find[0].

>dst[i] = '\0';
>}


Consider the more general case of removing the b from abc. You want
the answer to be ac. If your design does not move the a (there is no
need to), then you must move the c and any subsequent characters
including the terminating '\0' over to where the b was. Think of the
one function that will allow you to move data where the source and
destination overlap.


Remove del for email
  Réponse avec citation
Vieux 06/12/2007, 20h40   #14
Harald van Dijk
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Missing removeStr and substr function

On Wed, 05 Dec 2007 18:47:28 -0800, Barry Schwarz wrote:
> On Sun, 2 Dec 2007 07:56:54 -0800 (PST), tfelb <tomicoder@gmail.com>
> wrote:
>>void removestr (char dst[], char find[])

>
> You say you don't want to use pointers. Are you aware that when an
> array is passed into a function, the array argument is converted to a
> pointer to the first element. Your calling statement is identical to
> removestr(&string[0], "This");
> If it were legal syntax, "This" could be replaced with &"This"[0].


What's invalid about &"This"[0]?
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 14h12.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,36457 seconds with 22 queries