mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-05 20:47:53 +00:00
* fix #11352 strutil.insertSep handle negtive number * test for #11352 * optimize * not parts string var * Update lib/pure/strutils.nim Thanks! Co-authored-by: alaviss <leorize+oss@disroot.org> * need to be countdown Co-authored-by: alaviss <leorize+oss@disroot.org>
This commit is contained in:
@@ -2264,17 +2264,28 @@ proc insertSep*(s: string, sep = '_', digits = 3): string {.noSideEffect,
|
||||
## if `s` contains a number.
|
||||
runnableExamples:
|
||||
doAssert insertSep("1000000") == "1_000_000"
|
||||
|
||||
var L = (s.len-1) div digits + s.len
|
||||
result = newString(L)
|
||||
result = newStringOfCap(s.len)
|
||||
let hasPrefix = isDigit(s[s.low]) == false
|
||||
var idx:int
|
||||
if hasPrefix:
|
||||
result.add s[s.low]
|
||||
for i in (s.low + 1)..s.high:
|
||||
idx = i
|
||||
if not isDigit(s[i]):
|
||||
result.add s[i]
|
||||
else:
|
||||
break
|
||||
let partsLen = s.len - idx
|
||||
var L = (partsLen-1) div digits + partsLen
|
||||
result.setLen(L + idx)
|
||||
var j = 0
|
||||
dec(L)
|
||||
for i in countdown(len(s)-1, 0):
|
||||
for i in countdown(partsLen-1,0):
|
||||
if j == digits:
|
||||
result[L] = sep
|
||||
result[L + idx] = sep
|
||||
dec(L)
|
||||
j = 0
|
||||
result[L] = s[i]
|
||||
result[L + idx] = s[i + idx]
|
||||
inc(j)
|
||||
dec(L)
|
||||
|
||||
|
||||
13
tests/modules/tstrutils_insert_sep.nim
Normal file
13
tests/modules/tstrutils_insert_sep.nim
Normal file
@@ -0,0 +1,13 @@
|
||||
discard """
|
||||
output: '''
|
||||
-100
|
||||
-100,000
|
||||
100,000
|
||||
'''
|
||||
"""
|
||||
# test https://github.com/nim-lang/Nim/issues/11352
|
||||
|
||||
import strutils
|
||||
echo insertSep($(-100), ',')
|
||||
echo insertSep($(-100_000), ',')
|
||||
echo insertSep($(100_000), ',')
|
||||
Reference in New Issue
Block a user