Как проверить, правильно ли отформатирована строка? - PullRequest
0 голосов
/ 08 ноября 2019

Меня попросили написать программу, которая проверяет, имеет ли строка следующий формат:

"<number><number><number><number><-><number><number><number><space><capitalized word/sentence>"

Она должна вернуть #t, когда требования выполнены, и #f, если они не выполнены.

Я пытался использовать следующий код

(define (verify codpos)
      (cond ((string<=? (substring codpos 0 4) "9999")
             (string=? (substring codpos 4 5) "-")
             (string<=? (substring codpos 5 8) "999")
             (string=? (substring codpos 8 9) " ")
             (string>? (substring codpos 9 (string-length codpos)) "9")
             (string<? (substring codpos 9 (string-length codpos)) "a") #t)
            (else #f)))

Он указывает #t в каждом случае, независимо от того, выполнены условия или нет. Буду признателен за любую форму помощи. Я только недавно занялся программированием, и я не могу обернуться вокруг этого простого упражнения.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Я не понимаю заглавное слово / предложение, означающее «заглавное слово с предложением» или «заглавное слово или предложение», или «заглавное предложение с первой строчкой», или «заглавная строка с первой строкой, и длина может быть равна единице». «Приговор с символом» или «не разрешать или другой символ».

Если вы хотите это »

0 голосов
/ 08 ноября 2019

Вы можете просто использовать регулярные выражения для достижения этой цели:

#lang racket

(define (verify-rexpr s)
  (regexp-match? #px"^\\d{4}-\\d{3} (\\p{Lu}|\\s)*$" s))


(module+ test
  (require rackunit)
  ; -- 
  (check-true (verify-rexpr "1234-321 "))
  (check-false (verify-rexpr "1234-0s1 "))
  (check-true (verify-rexpr "9999-999 WORD"))
  (check-false (verify-rexpr "1234-321 word"))
  (check-true (verify-rexpr "1234-321 ALL CAPS SENTENCE"))
  (check-false (verify-rexpr "1234-321 Not ALL CAPS SENTENCE")))
...