如何从没有分度的文件中获取数字 0-255



>我有一个纯文本文件,其中只有数字(没有空格、逗号、换行符等),其中包含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

有谁知道我如何完成此行为?请尽量将您的答案保留在伪代码中,以便可以将其转换为许多编程语言

我不会将 temp 数组用于保存中间数字 - 因为 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。

antiguru的回应几乎就在那里。

主要问题是它没有考虑到数字只能有 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

相关内容

  • 没有找到相关文章

最新更新