Бесплатный курс по go. Зарегистрируйтесь для отслеживания прогресса →

Go: Обход строки

Так как строка — это массив байт, ее можно обойти с помощью цикла for:

package main

import (
    "fmt"
)

func main() {
    s := "hello"
    for i := 0; i < len(s); i++ {
        fmt.Println(string(s[i]))
    }

}

Вывод:

h
e
l
l
o

Таким способом можно обойти только строки, состоящие из ASCII символов. Если строка содержит мультибайтовые символы, вывод будет некорректен:

package main

import (
    "fmt"
)

func main() {
    s := "привет"
    for i := 0; i < len(s); i++ {
        fmt.Println(string(s[i]))
    }

}

Вывод проверьте сами в Go Playground

Задание

Реализуйте функцию shiftASCII(s string, step int) string, которая принимает на вход состоящую из ASCII символов строку s и возвращает новую строку, где каждый символ из входящей строки сдвинут вперед на число step. Например:

shiftASCII("abc", 0) // "abc"
shiftASCII("abc1", 1) // "bcd2"
shiftASCII("bcd2", -1) // "abc1"
shiftASCII("hi", 10) // "rs"

Если после сдвига код символа выходит за рамки ASCII, то необходимо преобразовать число по модулю 256 (взять остаток от деления %):

shiftASCII("abc", 256) // "abc"
shiftASCII("abc", -511) // "bcd"

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе