1

我有一个纯文本文件,其中只有数字(没有空格、逗号、换行符等),其中包含n 个数字,范围从 0 到 255。我想把它放进去并将这些值存储在一个数组中。

例子


假设我们在文件中有这个序列:

581060100962552569

我想像这样接受它,in.read文件输入流在哪里,tempArray是一个最多包含 3 个变量的本地数组,每次存储内容时都会擦除它endArray,这是我希望最终值去的地方:

in.read     tempArray     endArray
5           [5][ ][ ]     [] //It reads in "5", sees single-digit number X guarantees that "5X" is less than or equal to 255, and continues
8           [5][8][ ]     [58] //It reads in "8", realizes that there's no number X that could make "58X" smaller than or equal to "255", so it stores "58" in endArray
1           [1][ ][ ]     [58] //It wipes tempArray and reads the next value into it, repeating the logic of the first step
0           [1][0][ ]     [58] //It realizes that all single-digit numbers X guarantee that "10X" is less than or equal to "255", so it continues
6           [1][0][6]     [58][106] //It reads "6" and adds "106" to the endArray
0           [0][ ][ ]     [58][106] //It wipes tempArray and stores the next value in it
1           [0][1][ ]     [58][106]
0           [0][1][0]     [58][106][10] //Even though all single-digit numbers X guarantee that "010X" is less than or equal to "255", tempArray is full, so it stores its contents in endArray as "10".
0           [0][ ][ ]     [58][106][10]
9           [0][9][ ]     [58][106][10]
6           [0][9][6]     [58][106][10][96] //Not only can "96" not have another number appended to it, but tempArray is full
2           [2][ ][ ]     [58][106][10][96]
5           [2][5][ ]     [58][106][10][96] //There are numbers that can be appended to "25" to make a number less than or equal to "255", so continue
5           [2][5][5]     [58][106][10][96][255] //"5" can be appended to "25" and still be less than or equal to "255", so it stores it in tempArray, finds tempArray is full, so it stores tempArray's values in endArray as "255"
2           [2][ ][ ]     [58][106][10][96][255][37]
5           [2][5][ ]     [58][106][10][96][255][37] //There are numbers that can be appended to "25" to make a number less than or equal to "255", so continue
6           [6][ ][ ]     [58][106][10][96][255][37][25] //It sees that adding "6" to "25" would make a number that's larger than 255, so it stores "25" in the endArray and remembers "6" in the tempArray
9           [6][9][ ]     [58][106][10][96][255][37][25][69] //It sees that there is no number X such that "69X" is less than "255", so it stores "69" in endArray

有谁知道我怎样才能完成这种行为?请尽量将您的答案保留在伪代码中,以便可以将其翻译成多种编程语言

4

2 回答 2

4

我不会使用临时数组来保存中间数字 - 因为 CPU 数字以二进制格式存储,而您正在读取十进制数字。

这样的事情可以解决你的问题:

array = []
accumulator = 0
count = 0
while not EOF:
    n = readDigit()
    if accumulator*10 + n > 256 or count == 2:
         array.push(accumulator)
         accumulator = n
         count = 0
    else:
         accumulator = accumulator*10 + n
         count = count + 1

结果将附加到名为 的数组中array

编辑:感谢 DeanOC 注意到丢失的计数器。但 DeanOC 的解决方案将第一次迭代的计数器初始化为 0 而不是 1。

于 2012-10-20T19:03:58.173 回答
2

安提古鲁的反应快到了。

主要问题是它没有考虑到数字只能有3位数字。此修改应该适合您。

array = []
accumulator = 0
digitCounter = 0

while not EOF
    n = readDigit()

    if accumulator*10 + n > 255 or digitcounter = 3:
         array.push(accumulator)
         accumulator = n
         digitCounter = 1
    else:
         accumulator = accumulator*10 + n
         digitCounter = DigitCounter + 1
于 2012-10-20T19:30:14.770 回答