diff --git a/hw02_unpack_string/unpack.go b/hw02_unpack_string/unpack.go index f5746c1..9b25c67 100644 --- a/hw02_unpack_string/unpack.go +++ b/hw02_unpack_string/unpack.go @@ -14,6 +14,8 @@ var ( nums = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} numZero = '0' + + bslash = '\\' ) // True - если руна является цифрой. @@ -40,6 +42,18 @@ func Unpack(text string) (string, error) { return "", ErrInvalidString } + if runes[i] == bslash { // текущий символ слэш + if i == lenRunes-1 { // это последний символ + return "", ErrInvalidString + } + + if !IsDigit(runes[i+1]) && runes[i+1] != bslash { // следующий символ не цифра ине слэш + return "", ErrInvalidString + } + + i++ // нужно обработать следующий символ как обычный + } + if i == lenRunes-1 { // это последний символ res.WriteRune(runes[i]) break diff --git a/hw02_unpack_string/unpack_test.go b/hw02_unpack_string/unpack_test.go index 73dfe8c..25b678d 100644 --- a/hw02_unpack_string/unpack_test.go +++ b/hw02_unpack_string/unpack_test.go @@ -20,10 +20,10 @@ func TestUnpack(t *testing.T) { {input: "", expected: ""}, {input: "aaa0b", expected: "aab"}, // uncomment if task with asterisk completed - // {input: `qwe\4\5`, expected: `qwe45`}, - // {input: `qwe\45`, expected: `qwe44444`}, - // {input: `qwe\\5`, expected: `qwe\\\\\`}, - // {input: `qwe\\\3`, expected: `qwe\3`}, + {input: `qwe\4\5`, expected: `qwe45`}, + {input: `qwe\45`, expected: `qwe44444`}, + {input: `qwe\\5`, expected: `qwe\\\\\`}, + {input: `qwe\\\3`, expected: `qwe\3`}, } for _, tc := range tests { @@ -37,7 +37,7 @@ func TestUnpack(t *testing.T) { } func TestUnpackInvalidString(t *testing.T) { - invalidStrings := []string{"3abc", "45", "aaa10b", "aaa+b10"} + invalidStrings := []string{"3abc", "45", "aaa10b", "aaa+b10", `aaaa\`, `aaa\\\b`} for _, tc := range invalidStrings { tc := tc t.Run(tc, func(t *testing.T) {