Как изменить определенный символ в строке - PullRequest
0 голосов
/ 19 сентября 2019

В C мы определяем символ строки как Char.Поэтому я хочу изменить символ строки в Go.

if sum%11 != int(str[strlen-1]) {
    str[strlen-1] = byte(sum % 11)
    //fmt.Printf("%T %T\n", str[strlen-1], byte(sum%11))
} else {
    fmt.Println(sum)
}

Но он сообщит об ошибке "невозможно присвоить str [strlen - 1]".И str [strlen-1], и byte (сумма% 11) являются uint8.Почему это не так?Как мне конвертировать?

1 Ответ

1 голос
/ 19 сентября 2019

В отличие от C, строки Go являются неизменяемыми, поэтому вы не можете изменять отдельные байты в строке.Однако вы можете преобразовать строку в байтовый массив, изменить его и преобразовать этот байтовый массив в строку.

arr:=[]byte(str)
arr[strlen-1]=byte(sum%11)
str=string(arr)

Обратите внимание, что строки Go имеют кодировку UTF-8.Руна может быть представлена ​​в виде нескольких байтов.Изменяя подобные строки, вы можете получить недопустимую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...