overlapping as a parameter for count instead

This commit is contained in:
def
2014-07-28 16:48:07 +02:00
parent 72dbd12ca4
commit c78b1070a8

View File

@@ -803,16 +803,20 @@ proc rfind*(s, sub: string, start: int = -1): int {.noSideEffect.} =
if result != -1: return
return -1
proc count*(s: string, sub: string): int {.noSideEffect,
proc count*(s: string, sub: string, overlapping: bool = false): int {.noSideEffect,
rtl, extern: "nsuCountString".} =
## Count the occurences of a substring `sub` in the string `s`. Overlapping
## occurences of `sub` do not count.
## Count the occurences of a substring `sub` in the string `s`.
## Overlapping occurences of `sub` only count when `overlapping`
## is set to true.
var i = 0
while true:
i = s.find(sub, i)
if i < 0:
break
i += sub.len
if overlapping:
inc i
else:
i += sub.len
inc result
proc count*(s: string, sub: char): int {.noSideEffect,
@@ -829,18 +833,6 @@ proc count*(s: string, subs: set[char]): int {.noSideEffect,
if c in subs:
inc result
proc countOverlapping*(s: string, sub: string): int {.noSideEffect,
rtl, extern: "nsuCountOverlapping".} =
## Count the occurences of a substring `sub` in the string `s`. Overlapping
## occurences of `sub` do count.
var i = 0
while true:
i = s.find(sub, i)
if i < 0:
break
inc i
inc result
proc quoteIfContainsWhite*(s: string): string {.deprecated.} =
## Returns ``'"' & s & '"'`` if `s` contains a space and does not
## start with a quote, else returns `s`.
@@ -1394,6 +1386,6 @@ when isMainModule:
doAssert parseEnum("invalid enum value", enC) == enC
doAssert count("foofoofoo", "foofoo") == 1
doAssert countOverlapping("foofoofoo", "foofoo") == 2
doAssert count("foofoofoo", "foofoo", overlapping = true) == 2
doAssert count("foofoofoo", 'f') == 3
doAssert count("foofoofoobar", {'f','b'}) == 4