Fácil Go
Contando runes
Enunciado
Escreva um programa que leia uma string fixa "Olá, mundo!" e imprima quantas runes (caracteres Unicode) ela contém, além do número de bytes.
Requisitos
- Use
len()para obter o número de bytes. - Use
for rangeouutf8.RuneCountInStringpara contar as runes. - Imprima no formato:
Bytes: X, Runes: Y.
Código inicial
package main
import "fmt"
func main() {
s := "Olá, mundo!"
// Seu código aqui
}
Saída esperada
Bytes: 12, Runes: 11
Ver dica
Lembre-se: len(s) conta bytes. Para contar runes, você pode usar um loop for range e incrementar um contador, ou importar unicode/utf8 e usar utf8.RuneCountInString(s).
Mostrar solução
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "Olá, mundo!"
bytes := len(s)
runes := utf8.RuneCountInString(s)
fmt.Printf("Bytes: %d, Runes: %d\n", bytes, runes)
}
Passo a passo
- Declaramos a string
scom o valor"Olá, mundo!". len(s)retorna o número de bytes, que é 12 porque oáocupa 2 bytes em UTF-8.- Importamos
unicode/utf8para usarutf8.RuneCountInString(s), que conta os code points (runes). - Imprimimos os valores com
fmt.Printfno formato pedido.
Por que funciona
Em Go, strings são sequências de bytes. O caractere á é representado por dois bytes em UTF-8, então len(s) é maior que o número de caracteres visíveis. utf8.RuneCountInString percorre a string decodificando cada rune, contando corretamente os caracteres Unicode.
Erros comuns
- Usar
len(s)achando que conta caracteres: isso conta bytes e dá 12 em vez de 11. - Tentar acessar
s[i]e comparar com uma rune:s[i]ébyte, nãorune. - Esquecer de importar
unicode/utf8e tentar usarutf8.RuneCountInString.
Outra forma de resolver
Usar um loop for range para contar runes manualmente:
count := 0
for range s {
count++
}
Essa abordagem é útil se você também precisar processar cada rune.
Saída esperada
Bytes: 12, Runes: 11