Comprimento e Iteração de Caracteres
Nesta página
.len() retorna o número de bytes da string, não o número de caracteres
Unicode. Para texto ASCII puro os valores coincidem; caracteres acentuados ou
emoji podem ocupar mais de um byte.
.chars() devolve um array de strings — cada elemento é um caractere (uma
string de comprimento 1). Itere com for para processar letra a letra:
.len() para medir; .chars() para iterar e contar ocorrências.
08-len-and-chars.zolo
// Feature: Length and iteration over characters
// Syntax: `s.len()` -> int, `s.chars()` -> [str]
// When to use: measure length, iterate character by character.
// -- len: byte length ------------------------------------------
print("zolo".len()) // 4
print("".len()) // 0
print("hello world".len()) // 11
// Note: `.len()` returns the length in BYTES, not Unicode code
// points. Accented characters / emoji may take more than one byte.
print("cafe".len()) // 4 (plain ASCII)
print("a".len()) // 1
// -- chars: array of characters (1 string per element) --------
let cs = "abc".chars()
print(cs.len()) // 3
print(cs[0]) // a
print(cs[1]) // b
print(cs[2]) // c
// Iterate character by character.
for c in "zolo".chars() {
print(c)
}
// expected:
// z
// o
// l
// o
// Count occurrences of a character.
fn count_char(s: str, target: str) -> int {
var total = 0
for c in s.chars() {
if c == target {
total = total + 1
}
}
return total
}
print(count_char("mississippi", "s")) // 4
print(count_char("zolo lang", "o")) // 2
// Check whether a string is "empty".
fn is_empty(s: str) -> bool {
return s.len() == 0
}
print(is_empty("")) // true
print(is_empty("x")) // false
Desafio
Escreva uma função inverter(s: str) -> str que percorre .chars() de trás
para frente (use um índice decrescente) e acumula os caracteres com +. Teste
com "zolo" — o resultado deve ser "oloz".
Veja também