假设我们在一个串联字符串中有两个数字A和B:AB。如何在不知道A或B的长度的情况下区分A和B.
例如,假设我们有A是x坐标,B是y坐标。对于网格,我们在每个网格点都有一个文件。所以我们有文件:
99059900 = (99.05,99.00)
991010000 = (99.10,100.00)
1000510000 = (100.05,100.00)
100109910 = (100.10,99.00)
99059910 = (99.05,99.10)
991010010 = (99.10,100.10)
1000510010 = (100.05,100.10)
100109910 = (100.10,99.10)
在这种情况下,我们如何找到A和B的数字?约束条件是A和B的最后两位数字用一些常数值分隔:在上面,A增加0.05步,B增加0.1步。
答案 0 :(得分:0)
如果没有其他规则,这是一项模棱两可的任务。对于长度为N的字符串,有N-1种可能性,可以将它分成两个非空字符串。
你说你把A限制为2位数,但为什么?数字是否允许从零开始?他们是否具有必须满足的最低,最高或任何其他财产?除了数字之外还有其他字符吗?是否有更多字符串可用作参考?除非你有足够的限制,否则你无法消除这种歧义。
答案 1 :(得分:0)
在不知道A或B或两者的长度的情况下,无法确定A和B的确切值是从哪个开始。您将拥有A的长度+ B的长度 - A和B的可能值...假设非负数。如果你认为没有数字也导致零也可以缩小一点。
例如,你的9999 =(99,99)的例子可以来自至少2种其他可能性。 可能来自
9, 999
99, 99
999, 9
我建议使用标签分层值,逗号分隔值或您选择的其他分隔符值,以便能够将值正确地解析回原始值。
答案 2 :(得分:0)
假设非负整数,这是一个算法。
将A和B编码为数字:
将数字C解码为数字A和B:
Clojure实施:
(defn encode [a b]
(let [n (max (count (str a))
(count (str b)))]
(String/format (str "1%0" n "d%0" n "d")
(to-array [a b]))))
(defn decode [c]
(let [u (str c)
n (/ (dec (count u)) 2)]
[(Integer/parseInt (.substring u 1 (inc n)))
(Integer/parseInt (.substring u (inc n)))]))