Раскройте силу рун: переверните строку разными способами!

Привет, уважаемые любители программирования! Сегодня мы собираемся погрузиться в увлекательный мир рун и изучить различные способы перевернуть строку с помощью этих мистических символов. Итак, хватайте свое снаряжение для кодирования и отправляйтесь в это захватывающее путешествие!

Метод 1: использование фрагмента руны
Первый метод, который мы рассмотрим, включает преобразование строки в фрагмент рун, затем переворачивание фрагмента и преобразование его обратно в строку. Вот код для иллюстрации:

package main
import (
    "fmt"
)
func reverseStringWithRunes(str string) string {
    runes := []rune(str)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}
func main() {
    str := "Hello, World!"
    reversedStr := reverseStringWithRunes(str)
    fmt.Println(reversedStr)
}

Метод 2: использование буфера
В этом методе мы будем использовать буфер для хранения перевернутой строки посимвольно. Вот код:

package main
import (
    "bytes"
    "fmt"
)
func reverseStringWithBuffer(str string) string {
    var buffer bytes.Buffer
    for i := len(str) - 1; i >= 0; i-- {
        buffer.WriteByte(str[i])
    }
    return buffer.String()
}
func main() {
    str := "Hello, World!"
    reversedStr := reverseStringWithBuffer(str)
    fmt.Println(reversedStr)
}

Метод 3: рекурсивный подход
Давайте рассмотрим более элегантное решение с использованием рекурсии. Этот метод разбивает строку на более мелкие части, пока она не достигнет базового случая. Вот код:

package main
import (
    "fmt"
)
func reverseStringRecursively(str string) string {
    if len(str) <= 1 {
        return str
    }
    return reverseStringRecursively(str[1:]) + string(str[0])
}
func main() {
    str := "Hello, World!"
    reversedStr := reverseStringRecursively(str)
    fmt.Println(reversedStr)
}

Метод 4: использование стека рун
Наш последний метод предполагает использование структуры данных стека для переворачивания строки. Вот код:

package main
import (
    "fmt"
)
type RuneStack []rune
func (s *RuneStack) Push(r rune) {
    *s = append(*s, r)
}
func (s *RuneStack) Pop() rune {
    if len(*s) == 0 {
        return 0
    }
    index := len(*s) - 1
    element := (*s)[index]
    *s = (*s)[:index]
    return element
}
func reverseStringWithStack(str string) string {
    stack := RuneStack{}
    for _, r := range str {
        stack.Push(r)
    }
    var reversedStr string
    for len(stack) > 0 {
        reversedStr += string(stack.Pop())
    }
    return reversedStr
}
func main() {
    str := "Hello, World!"
    reversedStr := reverseStringWithStack(str)
    fmt.Println(reversedStr)
}

И вот оно! Мы рассмотрели четыре различных метода переворота строки с помощью рун. Предпочитаете ли вы простоту среза руны, эффективность буфера, элегантность рекурсии или подход на основе стека, эти методы помогут вам достичь желаемого результата. Так что вперед, экспериментируйте с этими методами и раскройте силу рун в своих начинаниях по программированию!