Hi All,

Can somebody post me the logic to find all the occurences of a "substring" in a big string.
The function strstr() gives the only first match.


  1. Create a pointer p (feel free to choose another name) to the string where you want to find the substrings in.
  2. Run strstr() on that pointer, as long as the return value isn't NULL and p doesn't point to the NULL-terminator of that string.
  3. Increase the pointer with one.
  4. Repeat, starting from step 2.

Steps 2 and 4 indicate that you'll have to use a loop.

Hi, Thank you for your reply.
This is not so optimized, i feel.
You mean to say,if my main string is 1024 chars long.
I need to loop for 1024 times.
Is there any better way to solve this problem.

>You mean to say,if my main string is 1024 chars long.
I need to loop for 1024 times.

No, you'll have to break the loop when strstr() returns NULL, to avoid additional overhead.
To avoid other overhead, you could increase the pointer with the length of the substring you're searching for.

Internally the strstr() function also loops through the string, at the moment when it finds the substring, it stops right there, without looping through the rest of the string, if it hasn't found the substring, the function will have looped through the whole string, and it will return NULL.
When it has found the substring, it will return a pointer to the beginning of that substring.

1)Do like strstr(mainstring,pattern)
2)until return not NULL..
increase pointer by strlen(pattern)


"i am going am here"

1st pointer point to beginning of 1st am 'am'

on the 2nd pass change return of strstr pointer by strlen(pattern).

and so on.


1)Do strtok(base_str,pattern)

for each iteration...your end of base string will point to staring address of all your patterns.