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 range ou utf8.RuneCountInString para 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

  1. Declaramos a string s com o valor "Olá, mundo!".
  2. len(s) retorna o número de bytes, que é 12 porque o á ocupa 2 bytes em UTF-8.
  3. Importamos unicode/utf8 para usar utf8.RuneCountInString(s), que conta os code points (runes).
  4. Imprimimos os valores com fmt.Printf no 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ão rune.
  • Esquecer de importar unicode/utf8 e tentar usar utf8.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