в статус number, добавлена проверка на слеш в текущей итерации

This commit is contained in:
Илья Смышляев 2023-11-05 16:20:41 +03:00
parent 201ed716ee
commit 095a8daab2
2 changed files with 8 additions and 2 deletions

View File

@ -45,7 +45,8 @@ func Unpack(str string) (string, error) {
if unicode.IsDigit(char) {
currentState = number
numOfRepeat, _ = strconv.Atoi(string(char))
repStr, err := repeatRune(runeArray[i-1], numOfRepeat)
n := strconv.Itoa(numOfRepeat)
repStr, err := repeatRune(runeArray[i-len(n)], numOfRepeat)
if err != nil {
// Если функция repeatRune возвращает ошибку, удаляем последний символ из результата.
res := result.String()
@ -60,7 +61,9 @@ func Unpack(str string) (string, error) {
currentState = start
}
case number:
if unicode.IsDigit(char) {
if char == '\\' {
currentState = escape
} else if unicode.IsDigit(char) {
var n = strconv.Itoa(numOfRepeat) + string(char)
numOfRepeat, _ = strconv.Atoi(n)
repStr, err := repeatRune(runeArray[i-len(n)], numOfRepeat)
@ -71,6 +74,7 @@ func Unpack(str string) (string, error) {
result.WriteString(res[0 : len(res)-1])
}
result.WriteString(repStr)
} else {
result.WriteRune(char)
currentState = start

View File

@ -26,6 +26,8 @@ func TestUnpack(t *testing.T) {
{input: `qwe\45`, expected: `qwe44444`},
{input: `qwe\\5`, expected: `qwe\\\\\`},
{input: `qwe\\\3`, expected: `qwe\3`},
{input: `qwe2\1`, expected: `qwee1`},
{input: `qwe2\\`, expected: `qwee\`},
}
for _, tc := range tests {