std.string.indexOf with an optional start-at parameter?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Apr 4 07:10:00 PDT 2011


On 4/4/11 8:18 AM, Steven Schveighoffer wrote:
> On Sun, 03 Apr 2011 14:24:33 -0400, spir <denis.spir at gmail.com> wrote:
>
>> On 04/03/2011 07:39 PM, Aleksandar Ružičić wrote:
>>> I needed std.string.indexOf to accept start position in the string to
>>> start the search at. I was really surprised when I realized that this
>>> (to me) standard parameter is "missing" (I'm used to indexOf in
>>> javascript, strpos in php and equivalent methods in other languages,
>>> which support start offset parameter).
>>>
>>> There might be some other function (in some other module) that does
>>> what I want but I wasn't able to find it (I find D's documentation not
>>> easy to search and read), so I've copied indexOf to my module and
>>> added wanted functionality:
>>>
>>> https://gist.github.com/900589
>>>
>>> now, I'm able to write, for example:
>>>
>>> auto pos = indexOf(haystack, '$', 10); // will starts search at 11th
>>> char in haystack
>>>
>>> and
>>>
>>> auto pos = indexOf(haystack, '$', -5); // will starts search at 5th
>>> char from the end
>>>
>>> My question is: is there a reason why there is no this functionality
>>> in phobos (maybe there's some language feature I'm not aware of?) and
>>> if no such reason exists, would it be possible to add it in future
>>> version of phobos/dmd?
>>
>> Agreed this is a fairly standard param in other languages, but D
>> easily (and rather cheaply) allows
>> auto pos = indexOf(s[i..$], char);
>
> That doesn't work, because it gets you the position in relation to
> s[i..$], whereas you want the position in relation to s.
>
> I think the requested feature is common enough to warrant inclusion,
> especially since it could take care of out-of-bounds problems where
> slicing would throw an error instead. To write the equivalent would be
> very non-trivial.
>
> -Steve

I'm worried that most people will want and mean n in indexOf(haystack, 
needle, n) as "start from the nth character from the front (or back)". 
Then we need the slower algorithm. Using a slice clarifies the intent on 
the caller's side.


Andrei


More information about the Digitalmars-d mailing list