diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2012-08-19 13:00:28 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2012-08-19 13:00:28 +0100 |
commit | 6c6dfff4e90fba5cfda70f1a210552f32f134480 (patch) | |
tree | ba051c029d0e577eb6a92c0f62ec2711143cdf1c | |
parent | 3a4e22de33754c8f0ee48892d45a7f1057ee3300 (diff) | |
download | Nim-6c6dfff4e90fba5cfda70f1a210552f32f134480.tar.gz |
Added strutils.rfind.
-rwxr-xr-x | lib/pure/strutils.nim | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim index 2509bf689..0f11b4d89 100755 --- a/lib/pure/strutils.nim +++ b/lib/pure/strutils.nim @@ -654,6 +654,20 @@ proc find*(s: string, chars: set[char], start: int = 0): int {.noSideEffect, for i in start..s.len-1: if s[i] in chars: return i return -1 + +proc rfind*(s, sub: string, start: int = -1): int {.noSideEffect.} = + ## Searches for `sub` in `s` in reverse, starting at `start` and going + ## backwards to 0. Searching is case-sensitive. If `sub` is not in `s`, -1 is + ## returned. + let realStart = if start == -1: s.len else: start + for i in countdown(realStart-sub.len, 0): + for j in 0..sub.len-1: + result = i + if sub[j] != s[i+j]: + result = -1 + break + if result != -1: return + return -1 proc quoteIfContainsWhite*(s: string): string = ## returns ``'"' & s & '"'`` if `s` contains a space and does not |