【问题标题】:Scheme strings manipulation and defining procedure方案字符串操作和定义过程
【发布时间】:2012-09-05 04:43:47
【问题描述】:

我需要帮助解决这个问题,因为我不知道如何解决这个问题

定义一个过程pick,它接受一个非空字符串s和一个非负整数i,并返回一个长度为1的子字符串,该子字符串由s中索引i处的字符组成。假设 i 是字符串 s 的合法索引。

~(选择“猫”0)

"c"

~(选择“猫”1)

“一个”

~(选择“猫”2)

“t”

【问题讨论】:

  • 这听起来像是一个家庭作业问题。

标签: string casting scheme substring


【解决方案1】:

试试这个,使用标准 Scheme 程序很简单:

(define (pick str idx)
  (string (string-ref str idx)))

它的工作原理如下:string-ref 从给定索引处的字符串中返回一个字符,string 过程将字符转换为长度为 1 的字符串。

没有真正需要使用substring 过程(因为我们只需要一个字符),但这也是一个有效的替代方案。

【讨论】:

  • 你究竟是如何使用它来制作程序的?我不明白
  • String-ref 从给定索引处的字符串中获取一个字符,字符串过程将该字符转换为长度为 1 的子字符串
【解决方案2】:

一种解决方案是使用substring

> (substring "Scheme" 1 3)
"ch"

这里“Scheme”这个词的字母被编号了。

  • 字母 S 的索引为 0。
  • 字母 c 的索引为 1。
  • 字母 h 的索引为 2。
  • 字母 e 的索引为 3。
  • 字母 m 的索引为 4。
  • 字母 e 的索引为 5。

表达式(substring "Scheme" 1 3) 生成一个新字符串 从 1 到 2 编号的字母。索引 3 是第一个索引 不在新字符串中。

由于您只想选择一个字符,请尝试以下操作:

> (substring "Scheme" 1 2)
"c"
> (substring "Scheme" 2 3)
"h"

现在你可以定义自己的函数了:

(define (pick a-string i)
    (substring a-string ??? ???))

应该怎么做???是吗?

【讨论】:

    猜你喜欢
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多