Я написал функцию, которая заменяет последовательность повторяющихся слов одним словом в строке (строка []). Я использую «диапазон» для циклического перемещения по срезу и использую «append ()» для изменения среза. Ниже приведен код:
func RemoveContinuosStrings(input []string) []string {
top:=0
for i,_ := range input {
if input[i] != input[top] {
if top != i-1 {
input = append(input[:top+1], input[i:]...)
}
top = i
}
}
return input[:top+1]
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("enter text")
input := make([]string, 0, 0)
for scanner.Scan() {
input = append(input, scanner.Text())
}
fmt.Println("INPUT", input)
input = RemoveContinuosStrings(input)
fmt.Println("OUTPUT", input)
}
при выполнении кода выше я вижу следующую ошибку:
===================================================
vignesh@vignesh-ThinkPad-E470 ~/go-book/chapter4 $ ./4_6_eliminate_duplicate_string
enter text
qwe
asd
asd
zxc
asd
asd
INPUT [qwe asd asd zxc asd asd]
panic: runtime error: index out of range
goroutine 1 [running]:
main.RemoveContinuosStrings(0xc420088000, 0x6, 0x8, 0x20, 0x0, 0x0)
/home/vignesh/go-book/chapter4/4_6_eliminate_duplicate_string.go:11 +0x2a0
main.main()
/home/vignesh/go-book/chapter4/4_6_eliminate_duplicate_string.go:33 +0x33a
vignesh@vignesh-ThinkPad-E470 ~/go-book/chapter4 $
=======================================================
Итак, это неправильно или не разрешено добавлять к срезу, повторяемому через «диапазон». Я видел несколько примеров в Интернете, где они добавляли к срезу, но выполняли итерацию без использования «диапазона» (например: для i = 0; i