Преобразование типов данных: Напишите программу 3

Сообщения
1 471
Реакции
271
Сайт
tehadm.ru
Представьте что вы работаете в большой компании где используется модульная архитектура. Ваш коллега написал модуль с какой-то логикой (вы не знаете) и передает в вашу программу какие-то данные. Вы же пишете функцию которая считывает две переменных типа string , а возвращает число типа int64 которое нужно получить сложением этих строк.

Но не было бы так все просто, ведь ваш коллега не пишет на Go, и он зол из-за того, что гоферам платят больше. Поэтому он решил подшутить над вами и подсунул вам свинью. Он придумал вставлять мусор в строки перед тем как вызывать вашу функцию.

Поэтому предварительно вам нужно убрать из них мусор и конвертировать в числа. Под мусором имеются ввиду лишние символы и спец знаки. Разрешается использовать только определенные пакеты: fmt, strconv, unicode, strings, bytes. Они уже импортированы, вам ничего импортировать не нужно!

Считывать и выводить ничего не нужно!

Ваша функция должна называться adding() !


Считайте что функция и пакет main уже объявлены!

Sample Input:
%^80 hhhhh20&&&&nd

Sample Output:
100
 
C-подобный:
package main

import (
    "bytes"
    "fmt"
    "strconv"
    "strings"
    "unicode"
)

func adding(s1, s2 string) int64 {
    s1 = cleanString(s1)
    s2 = cleanString(s2)

    num1, _ := strconv.ParseInt(s1, 10, 64)
    num2, _ := strconv.ParseInt(s2, 10, 64)

    return num1 + num2
}

func cleanString(s string) string {
    var buffer bytes.Buffer

    for _, r := range s {
        if unicode.IsDigit(r) {
            buffer.WriteRune(r)
        }
    }

    return strings.TrimSpace(buffer.String())
}

func main() {
    result := adding("%^80", "hhhhh20&&&&nd")
    fmt.Println(result)
}
 
C-подобный:
func adding(a, b string) int64 {
    var ai, bi int64
    a = strings.TrimFunc(a, notdigit)
    b = strings.TrimFunc(b, notdigit)
    ai, _ = strconv.ParseInt(a, 10, 64)
    bi, _ = strconv.ParseInt(b, 10, 64)
    return ai + bi
}

func notdigit(r rune) bool {
    return !('0' <= r && r <= '9')
}
 
C-подобный:
func adding(a, b string) int64 {
    var ai, bi int64
    ai, _ = strconv.ParseInt(strings.TrimFunc(a, func(r rune) bool {
        return !unicode.IsDigit(r)
    }), 10, 64)
    bi, _ = strconv.ParseInt(strings.TrimFunc(b, func(r rune) bool {
        return !unicode.IsDigit(r)
    }), 10, 64)
    return ai + bi
}
 
Назад
Верх Низ