0

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

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

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

4

3 回答 3

1

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

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

于 2013-09-15T14:00:24.983 回答
1

这可能是一个提示

  1. 像 TLama 所说的那样使用指针/链表。
  2. 在某些情况下,递归也是一种不预定义变量数量的方法。
  3. 使用 FPC 提供的动态(可调整大小)数组。

我认为第一种可能性最大。

于 2013-09-16T06:52:09.840 回答
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 字符,那么这将不起作用。您可以通过使用两个或更多字符来表示每个计数来解决此问题,但这很快就会变得愚蠢。

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

杰瑞

于 2013-09-16T07:22:12.777 回答