typestar

Runas, bytes y cadenas en Go

Una cadena es bytes; recorrerla con range produce runas, y no son lo mismo.

func runes(text string) (int, int, string) {
    bytes := len(text)
    chars := utf8.RuneCountInString(text)

    var offsets []string
    for index, char := range text {
        offsets = append(offsets, fmt.Sprintf("%d:%c", index, char))
        if len(offsets) == 3 {
            break
        }
    }

    asRunes := []rune(text)
    reversed := make([]rune, len(asRunes))
    for i, char := range asRunes {
        reversed[len(asRunes)-1-i] = char
    }

    return bytes, chars, string(reversed) + strings.Join(offsets, ",")
}

Cómo funciona

  1. len cuenta bytes; utf8.RuneCountInString cuenta caracteres.
  2. El range entrega el desplazamiento en bytes y la runa que hay ahí.
  3. Indexar una cadena da un byte, no un carácter.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
20
Caracteres a escribir
450
Tokens
131
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 83 segundos.

Escribe este fragmento

Paso 2 de 5 en Cadenas y formato; paso 26 de 30 en Fundamentos del lenguaje.

← Anterior Siguiente →