区分字符串中的数字

时间:2017-09-06 19:07:47

标签: arrays string algorithm

假设我们在一个串联字符串中有两个数字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步。

3 个答案:

答案 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编码为数字:

  1. 将A和B转换为字符串:S = str(A),T = str(B)
  2. 左边填充S和T中最短的零,因此S和T的长度相同。
  3. U = cooncat(“1”,S,T)
  4. C = int(U)
  5. 将数字C解码为数字A和B:

    1. U = str(C)
    2. N =(len(U) - 1)/ 2
    3. A = U [1:N + 1]且B = U [N + 1:2 * N + 1]
    4. 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)))]))