我想知道是否有开源库或算法可以扩展非数字范围。例如,如果您有到9A
的1A
,您应该得到
1A, 2A, 3A, 4A, 5A, 6A, 7A, 8A, 9A.
我试过用谷歌搜索这个,我能想到的最好的是Regex,它可以用破折号(1-3变成1,2,3)来扩展数字。
发布于 2008-09-06 10:34:01
正如其他人所指出的,更具体的将是有用的。我认为你不能期望有一个库可以根据你能想出的字符串的任意顺序来生成范围。
如果您可以简单地定义任何给定字符串的后继者是什么,那么解决方案就非常简单。也就是说,如果你在字符串上有一个后继函数S
(例如,使用S('3A') = '4A'
),那么可以使用如下代码:
s = initial_string
while s != final_string do
output s
s = S(s)
output s
我在过去用来生成具有给定长度l
和给定范围b
到e
字符的所有字符串的代码如下(伪)代码。它可以很容易地适应各种变化。
// initialise s with b at every position
for i in [0..l) do
s[i] = b
done = false
while not done do
output s
j = 0
// if s[j] is e, reset it to b and "add carry"
while j < l and s[j] == e do
s[j] = b
j = j + 1
if j == l then
done = true
if not done then
s[j] = s[j] + 1
例如,要从特定字符串开始,只需更改初始化即可。要设置结束,您只需更改内部的行为,同时单独处理位置l
(限制到该位置上的结束字符串中的字符,如果到达,则递减l
)。
发布于 2008-09-05 12:45:56
我试图让它保持开放,因为可能性的数量是惊人的。我相信,如果不经过大量的技术细节,这个问题就不能在这里得到100%的回答,它被认为是一个“好”或“坏”的范围。我只是想找到一个跳跃点,看看别人是如何解决这个问题的。我希望有人写一篇博客文章,解释他们是如何解决这个问题的,或者创建一个完整的库来处理这个问题。
发布于 2008-09-05 13:06:43
我想说,解决方案的第一步将是定义字符和数字如何相互作用并形成一个序列。给定的示例不清楚,因为您至少会假设它运行1A,1B……8Y,8Z,9A -假设您的输入被限制为十进制,后跟单个字符。
如果你可以为字符和小数定义一个连续的序列,那么你只需要一些递归/循环就可以生成该序列的一部分。
例如,您可以假设输入中的每个字符都是(1-9A-Z)之一,因此您可以很容易地通过获取字母字符的十进制ascii值并减去55来使其连续,实际上得到的范围是(1-35)
https://stackoverflow.com/questions/45642
复制相似问题