首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DrRacket中,如何检查字符串是否有一定数量的字符,以及如何确定字符串中的第一个字符是什么?

在DrRacket中,如何检查字符串是否有一定数量的字符,以及如何确定字符串中的第一个字符是什么?
EN

Stack Overflow用户
提问于 2019-06-05 04:16:42
回答 1查看 2.2K关注 0票数 0

基本上,我有一个问题,这是解决问题所需的信息。

  1. PigLatin。猪拉丁语是一种用英语单词重新排列字母的方式。例如,“猪拉丁语是愚蠢的”这句话就变成了“igpay upidstay”。

元音(“a”、“e”、“i”、“o”和“u”)与辅音(任何不是元音的字母)是分开处理的。为了简单起见,我们认为“y”永远是辅音。尽管存在各种形式的猪拉丁语,但我们将使用以下规则:

(1)两个字母或少于两个字母的字在结尾加上“way”。所以“a”变成了“离开”。

(2)在任何以辅音开头的单词中,辅音被移至末尾,并添加“ay”。如果一个单词以两个以上的辅音开头,则只移动两个字母的fi。因此,“hello”变成“ellohay”,而“string”变成“循环”。

(3)任何以元音开头的词,在结尾只加上“way”。所以“解释”变成了“解释方式”。

编写一个函数(Pig-拉丁文L),它消耗一个非空的(listof ),并返回一个Str,其中包含L转换成Pig拉丁语的单词。L中的每个值应该只包含小写字母,并且长度至少为1。

我知道我需要在这里设置三个主要的条件,我正在努力学习如何使用正确的语法来写出我的解决方案。首先,我需要创建一个条件,查看字符串的长度是否小于2,以满足(1)条件。对于(2)我需要查看字符串中的前两个字符,我假设必须将字符串转换为char列表( string -> list )。对于(3),我知道我只需要查看字符串中的第一个字符,基本上我必须重复我对(2)所做的操作,但只需要查看第一个字符。

不过,我不知道该如何操纵一张查尔的名单。我也不知道如何确保字符串长度符合标准。如能提供任何协助,将不胜感激。基本上,我几乎没有任何代码来解决我的问题,因为我对在这里做什么感到困惑。

这个问题的一个例子是

代码语言:javascript
复制
 (pig-latin (list "this" "is" "a" "crazy" "exercise")) => 
"isthay isway away azycray exerciseway"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 08:43:52

解决这一问题的最佳策略是:

  1. 签入文档所有可用的字符串过程。我们不需要将输入字符串转换为一个字符列表来对其进行操作,您会发现有一些现有的过程可以满足我们的所有需求。
  2. 编写辅助程序。事实上,我们只需要一个程序来告诉我们,一个字符串是否包含一个给定位置的元音;问题是只使用are字符,这样我们就可以否定这个过程来查找辅音。

确定写入条件的最佳顺序也很重要,例如:条件1和条件3可以在单个情况下合并。这是我的建议:

代码语言:javascript
复制
(define (vowel-at-index? text index)
  (member (string-ref text index)
          '(#\a #\e #\i #\o #\u)))

(define (pigify text)
        ; cases 1 and 3
  (cond ((or (<= (string-length text) 2)
             (vowel-at-index? text 0))
         (string-append text "way"))
        ; case 2.1
        ((and (not (vowel-at-index? text 0))
              (vowel-at-index? text 1))
         (string-append (substring text 1)
                        (substring text 0 1)
                        "ay"))
        ; case 2.2
        (else
         (string-append (substring text 2)
                        (substring text 0 2)
                        "ay"))))

(define (pig-latin lst)
  (string-join (map pigify lst)))

对于最后一步,我们只需要将pigify过程应用于输入中的每个元素,这就是map所做的。它如预期的那样运作:

代码语言:javascript
复制
(pig-latin '("this" "is" "a" "crazy" "exercise"))
=> "isthay isway away azycray exerciseway"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56454196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档