[DGD] find_in_str

Mikael Lind mikkelin at gmail.com
Sun Jul 8 14:37:10 CEST 2007


Hello Chris,

On 08/07/07, chris . <psych_mayo at hotmail.com> wrote:
> This is a function i made for my auto object.  It allows you to search a
> string for instances of a substring.  It returns an array containing the
> locations in the string of the start point for each substring.  I welcome
> suggestions and mention of any bugs.

First suggestion: Put utility functions in separate utility programs
(e.g. /lib/util/string) instead of adding them to the auto object.
Rationale: Cohesion.

> static int *find_in_str(string search, string str) {
>         int i;
>         string *exploded;
>         exploded = explode(search+str+search,search);
>         if(sizeof(exploded) > 1) {
>                 int charnum;
>                 int *output;
>                 charnum = 0;
>                 output = ({});
>                 for(i=0;i < sizeof(exploded)-1;i++) {
>                         charnum += strlen(exploded[i]);
>                         output += ({charnum});
>                         charnum += strlen(search);
>                         }
>                 if(sizeof(output) != 0)
>                         return output;
>                 }
>         }

There does not seem to be a return statement for all control paths. I
think that this means that the function will return nil in those
cases.

Second suggestion: Have a return statement for all control paths.
Rationale: Style.

Third suggestion: Personally, I probably would prefer returning an
empty array instead of nil when the string is not found. Rationale:
Consistency.

Fourth suggestion: You can avoid the array concatenations by
preallocating the result array with allocate(). Rationale:
Performance.

The name is slightly ambiguous. What would you call a function that
only returns the index of the first match?

Fifth suggestion: Rename the function to find_all_substrings() or similar.

I have not tested your function so I do not know if it works. I did
not see any obvious problem with it when reading it. The function
looks well suited for unit testing. You could write a test program
that calls it with some tricky input and verify that it does the right
thing.

Regards,
Mikael



More information about the DGD mailing list