Pascal - 定义没有数组的未知数量的变量

时间:2013-09-15 13:02:13

标签: pascal freepascal

我正在使用这个练习:制作一个程序,给出一个单词的连续字母数--ex:如果我输入aaafdseergftth,程序返回a = 3,e = 2,t = 2 - 。

我想出了几个解决方案,比如定义一个字符串,然后使用数组来获取字符,然后用while循环进行比较,但问题是:我不能使用数组,字符串,sunbfunctions解决这个问题,并明确表示我必须寻找另一种解决方案。

现在这是我的第二个想法,不使用字符串或数组:定义一个未知数量的char变量并输入每个变量,直到使用像While not (Eoln) do(...)这样的while循环输入Intro。而这是我现在唯一可以解决的问题,但是当我在寻找一种方法来定义未知数量的变量时,我发现只有一个数组的解决方案,我应该调整大小以输入新的变量。 如何在不使用数组的情况下定义未知数量的变量? - 它甚至可能吗? - ,如果无法完成,我怎么能在不使用数组和字符串的情况下获得单词的每个字符?

3 个答案:

答案 0 :(得分:1)

你的问题的答案是“不”:你不能在没有数组的情况下定义未知数量的变量,至少不使用脏兮兮的黑客(我仍然不确定它是否可以使用它们) 。

我建议你这样想:你不需要整个字符串,你只需要记住当前字符之前出现的字符。这是解决它的方法:)

答案 1 :(得分:1)

这可能是

的暗示
  1. 像TLama一样使用指针/链接列表。
  2. 在某些情况下,递归也是一种不预先定义变量数量的方法。
  3. 使用FPC提供的动态(可调整大小)数组。
  4. 我认为第一种是最有可能的。

答案 2 :(得分:0)

使用字符串怎么样?

如果输入为ascii字符且每个字母的最大出现次数为94,则可以将计数存储为单个ascii字符,将哪个字母存储为字符串中的索引。然后整个事情只是字符串操作。

例如:

如果将0计数存储为空格。计数1存储为!,计数33存储为A.计数65存储为a,计数94存储为〜等(ascii代码减去32)

如果字符串中的第一个字符代表空格数,第二个字符代表数字!第33个字符代表A的数字,第94个字符代表〜等的数字(ascii代码减去32)

然后输入“a”看起来有93个空格,除了第65个字符,可以编码为!意思是1.“aabbab”的输入将是除第65和第66个字符之外的所有空格,这将是#表示3。

当然,如果最大出现次数大于94或者它们不是ascii字符,那么这将不起作用。你可以通过使用两个或多个字符来表示每个计数,但这很快就会变得愚蠢。

我没有说这是一个好主意,我会杀死那些编写真实代码的人,但是对于一个思想实验来说,目标明确是“寻找另一种解决方案”。那么这符合这个标准。

杰里