Загрузка...

Нужна помощь с заданием на Go.

Тема в разделе Go создана пользователем Ause 22 янв 2025. 371 просмотр

Загрузка...
  1. Ause
    Ause Автор темы 22 янв 2025 0 6 авг 2021
    1. Пользователь вводит текст одной строкой и нажимает “enter”.

    2. В тексте могут присутствовать различные специальные символы, которые надо обрабатывать согласно условиям ниже:
    1. Если в тексте между словами присутствует несколько пробелов подряд, надо оставить только один из них. Для реализации этого подпункта можно пользоваться методами Replace() и ReplaceAll() из пакета strings.
    2. Если в тексте присутствует знак минус (-), это значит, что символ слева от этого знака надо поменять местами с символом, который стоит справа от этого знака. Обратите внимание, что символом может быть не только буква, но и цифра или любой другой знак/символ, в том числе символ пробела. После смены символов местами, знак минус (-) надо удалить из строки результата.
    3. Если в тексте присутствует знак плюс (+), вам необходимо заменить его на восклицательный знак (!).
    4. В тексте могут присутствовать цифры (от 0 до 9). Вам необходимо посчитать их сумму и удалить из текста. Сумму цифр вам нужно добавить в конец результирующей строки через пробел (пробел должен стоять перед суммой цифр). Если цифр в тексте не было - “0” (ноль) в конце строки выводить не нужно.
    Все манипуляции с текстом должны выполняться ровно в той последовательности, которая описана в пункте 2. То есть, сначала выполняется пункт A, затем пункт B, затем C и D. Это важно для получения корректного итогового результата.
    Пример ввода:
    генрих1 играет+2 л-июбит0школу
    Пример вывода:
    генрих играет! илюбитшколу 3
    Пример ввода №2:
    Я ю-лбю-л голанг всем сердцем+
    Пример вывода:
    Я люблю голанг всем сердцем!
    Пример ввода:
    Я-б к-2 р3!
    Пример вывода:
    ЯЯб кк р! 5
    Вот мой код который в 3м примере вывода выдает ошибку.

    Код
    package main

    import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
    )

    type Text struct {
    Content string
    }

    func (t *Text) textModifier() {
    // Удаление лишних пробелов (пункт A)
    t.Content = strings.ReplaceAll(t.Content, " ", " ")
    for strings.Contains(t.Content, " ") { // Пока есть двойные пробелы
    t.Content = strings.ReplaceAll(t.Content, " ", " ")
    }

    // Обработка символа '-' (пункт B)
    runes := []rune(t.Content)
    var result []rune
    i := 0
    for i < len(runes) {
    if runes[i] == '-' && i > 0 && i < len(runes)-1 {
    // Меняем местами символ слева и символ справа от '-'
    left := runes[i-1]
    right := runes[i+1]
    result = result[:len(result)-1] // Убираем последний символ, чтобы заменить его
    result = append(result, right, left)
    i += 2 // Пропускаем символ справа от '-'
    } else {
    result = append(result, runes[i])
    i++
    }
    }
    t.Content = string(result)

    // Замена '+' на '!' (пункт C)
    t.Content = strings.ReplaceAll(t.Content, "+", "!")

    // Сумма цифр и их удаление (пункт D)
    sum := 0
    finalResult := []rune{}
    for _, char := range t.Content {
    if char >= '0' && char <= '9' { // Проверяем, является ли символ цифрой
    digit, _ := strconv.Atoi(string(char))
    sum += digit
    } else {
    finalResult = append(finalResult, char)
    }
    }

    t.Content = string(finalResult)
    if sum > 0 {
    t.Content += " " + strconv.Itoa(sum)
    }

    // Вывод результата
    fmt.Println(t.Content)
    }

    func main() {
    text := &Text{}
    // Создаем новый сканер для чтения из стандартного ввода
    scanner := bufio.NewScanner(os.Stdin)

    // Просим пользователя ввести строку
    fmt.Println("Введите строку:")

    for scanner.Scan() {
    text.Content = scanner.Text()
    text.textModifier()
    }
    }
     
Top