gpt4 book ai didi

string - SmallTalk 中的字符串解析

转载 作者:行者123 更新时间:2023-12-01 02:41:59 26 4
gpt4 key购买 nike

我要尝试的是将字符串中的每个字符与下一个(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 等?
解决了

最佳答案

来自“Smalltalk-80”:

Since argument names are pseudo-variable names, they can be used to access values like variable names, but their values cannot be changed by assignment. In the method for spend:for:, a statement of the form

amount =: amount * taxRate

would be syntactically illegal since the value of amount cannot be reassigned.



您可以使用 collect:创建新集合的消息:
z =: y collect: [:char | (ch asciiValue + 1) asCharacter ].
Character s 不回复 + ,因此您需要转换为 Integer然后回来。请注意,由于 String s 是集合,他们也回复 collect:
x collect: [:ch | (ch asciiValue + 1) asCharacter ]

如果您只需要 ASCII 字符,请在转换回字符之前取余数模 128。
x collect: [:ch | (ch asciiValue + 1 \\ 128) asCharacter ]

如果您只想增加字母而不是其他字符,请向块添加条件。
x collect: [:ch | ch isLetter
ifTrue: [(ch asciiValue + 1) asCharacter]
ifFalse: [ch] ]

请注意,最后一个块不处理连续范围末尾的字母(例如 $z ,或者,如果解释器支持扩展的 ASCII 或 Unicode,则 $<16rD6> ),因为确切的方法取决于系统的功能(基本上,什么被认为是一封信)。

关于string - SmallTalk 中的字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8031329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com