String 创建一个函数,在开始和结束时用两个字符串覆盖一个字符串
我用奇怪的语言Racket在开头和结尾用另外两个字符串覆盖一个字符串String 创建一个函数,在开始和结束时用两个字符串覆盖一个字符串,string,scheme,racket,overwrite,String,Scheme,Racket,Overwrite,我用奇怪的语言Racket在开头和结尾用另外两个字符串覆盖一个字符串 (define overwrite (s beg end)... 例如,(覆盖“弹射器”“狗”“布拉”)应该输出“dogablah” (覆盖“greenbeans”“munk”“grub”)应输出“munknbgrub” 有时,覆盖会完全覆盖中心词: (覆盖“狗”“老鼠”“跳蚤”)应输出“鼠标飞行” 主要问题是我只能使用三个内置函数来尝试解决这个问题。(字符串长度),(子字符串)和(字符串附加) 我尝试了以下方法,但没有效果
(define overwrite (s beg end)...
例如,(覆盖“弹射器”“狗”“布拉”)
应该输出“dogablah”
(覆盖“greenbeans”“munk”“grub”)
应输出“munknbgrub”
有时,覆盖会完全覆盖中心词:
(覆盖“狗”“老鼠”“跳蚤”)
应输出“鼠标飞行”
主要问题是我只能使用三个内置函数来尝试解决这个问题。(字符串长度),(子字符串)和(字符串附加)
我尝试了以下方法,但没有效果:
(define (overwrite s beg end)
(string-append (substring s 0 (string-length beg)) ""
(substring s (- (string-length s) (string-length end))
(string-length s))))
我可以使用助手函数和其他基本的数学函数,但这是我以前从未做过的事情。太糟糕了,scheme/racket没有一些易于使用的替换功能。
提前谢谢!这是我能得到的最具体的 显然发现这是一个简单的答案。废话
(定义(结束时覆盖)
(字符串附加beg(子字符串s(字符串长度beg)((字符串长度s)(字符串长度结束)))结束))
我的意思是,如果有人有更好的方法,请随意分享 使用单线解决方案:
(define (overwrite s beg end)
(string-append beg (substring s (string-length beg) (- (string-length s) (string-length end))) end)
请注意,以下操作将起作用:
(overwrite "greenbeans" "munk" "grub")
=> "munknbgrub"
但以下措施将失败:
(overwrite "dog" "mouse" "flea")
原因是,只接受非负整数作为参数。自从争论以来
(- (string-length s) (string-length end))
如果s
的字符串长度小于end
,例如“dog”vs“flea”,则变为负值,这将引发异常
您可以通过检查s
的长度是否小于beg
和end
的组合长度来解决此问题,在这种情况下,您只需附加beg
和end
。例如:
(define (overwrite s beg end)
(let ((l1 (string-length s))
(l2 (string-length beg))
(l3 (string-length end)))
(if (>= (+ l2 l3) l1)
(string-append beg end)
(string-append beg (substring s l2 (- l1 l3)) end))))
然后你将有:
(overwrite "greenbeans" "munk" "grub")
=> "munknbgrub"
(overwrite "dog" "mouse" "flea")
=> "mouseflea"
我承认这是一个很好的答案,但是我们在分配作业后才了解了条件语句,并且被告知我们不允许在这个问题中使用条件语句。