【发布时间】:2011-11-06 23:49:45
【问题描述】:
我正在尝试将字符串中的每个字符与下一个字符(a-> b、y -> z 等)进行切换。不知道如何在 Smalltalk 中做到这一点并尝试像这样组合:
x := 'costam'.
y := x asArray.
y do: [:charr | charr := charr + 1. ].
y do: [:char | Transcript show: char printString; cr].
我所做的是:遍历数组并增加每个字符.. 虽然它不起作用。我收到错误:尝试存储到参数中。我该如何解决这个问题并以正确的方式做到这一点?
现在我得到了这样的东西:
x := 'costam'.
y := x asArray.
b := y at: 2.
n := 1.
m := 5.
[ n < m ] whileTrue: [
n := n + 1.
y at: n put: 'a'.
Transcript show: (y printString).
].
剩下的问题是如何“增加”字符,例如 a -> b g -> h 等? 解决了
【问题讨论】:
-
该解决方案当然只在 ascii 范围内有效。那里的字符的数字映射符合您的期望。如果您离开该范围,它将无法正常工作。好吧,它也不适用于 z,Z。您需要定义您“真正”想要做什么。你可以看到有一种习惯是通过构建派生类(收集:创建一个新字符串)而不是改变源结构(原始字符串)。