(DrRacket) Проблема манипуляции со строками при создании электронных писем студентов - PullRequest
0 голосов
/ 28 января 2020

У меня проблемы с поиском части строки для первого имени, когда длина электронного письма goose меньше 9

(check-expect( goose-mail "becky""anderson"12)"12abecky@uragoose.ca")

В Goose университете студентам дается уникальное имя пользователя на основании их имени и специального идентификационного номера. Имя пользователя начинается со специального идентификационного номера, за которым следует первая буква их фамилии, а затем имя. Все имена пользователей ограничены максимум 9 буквами, поэтому часто бывает так, что в них включена только часть имени. Все имена пользователей указаны в нижнем регистре. Специальный идентификационный номер - это положительное целое число, которое меньше 1000. Адрес электронной почты - это имя пользователя с добавленным к нему «@ ura goose .ca». Напишите функцию Racket goose -mail, которая использует две непустые строки имя-фамилия, фамилия и неотрицательное целое число ID-num, где 0 ≤ ID-num ≤ 999 и создает адрес электронной почты для студента с указанными именами и фамилиями и идентификационным номером. Имя и фамилия имя указано в нижнем регистре.> То, что у меня есть, это

(check-expect(1st-last-name-letter "pham")"p")
(define(1st-last-name-letter L)
  (substring L 0 1))

(check-expect(ID-num 12)"12")
(define (ID-num ID)
  (number->string ID))


(check-expect(user-name "andrew" "pham" 123)"123pandrew")

(define(user-name first-name last-name ID)

(string-append (string-append(ID-num ID)(1st-last-name-letter last-name))
first-name) )

1 Ответ

0 голосов
/ 28 января 2020

Нам просто нужно проверить длину полученного имени пользователя и при необходимости обрезать его до необходимого размера:

(define (user-name first-name last-name ID)
  (let ((username (string-append (ID-num ID) (1st-last-name-letter last-name) first-name)))
    (if (<= (string-length username) 9)
        username
        (substring username 0 9))))
...