我在 C 中有一个字符串数组和一个整数,表示数组中有多少个字符串。
char *strarray[MAX];
int strcount;
在这个数组中,最高索引(其中 10 高于 0)是最近添加的项目,最低索引是最远添加的项目。数组中项目的顺序很重要。
我需要一种快速的方法来检查数组的重复项,删除除最高索引之外的所有重复项,然后折叠数组。
例如:
strarray[0] = "Line 1";
strarray[1] = "Line 2";
strarray[2] = "Line 3";
strarray[3] = "Line 2";
strarray[4] = "Line 4";
会成为:
strarray[0] = "Line 1";
strarray[1] = "Line 3";
strarray[2] = "Line 2";
strarray[3] = "Line 4";
原始数组的索引 1 被删除,索引 2、3 和 4 向下滑动以填补空白。
我对如何做到这一点有一个想法。它未经测试,我目前正在尝试对其进行编码,但仅根据我的模糊理解,我确信这是一个可怕的算法。
每次将新字符串添加到 strarray 时,都会运行下面介绍的算法。
为了表明我正在尝试,我将在下面包含我提出的算法:
- 搜索整个 strarray 以匹配 str
- 如果没有匹配,什么也不做
- 如果找到匹配,将 str 放入 strarray
- 现在我们有一个最多包含 1 个重复条目的 strarray
- 将最高索引 strarray 字符串添加到临时字符串数组的最低索引
- 继续向下进入 strarray 并检查每个元素
- 如果发现重复,跳过它
- 如果不是,则将其添加到临时字符串数组的下一个最高索引
- 反转临时字符串数组并复制到 strarray
再一次,这是未经测试的(我现在正在实施它)。我只是希望那里的人会有更好的解决方案。
项目的顺序很重要,代码必须使用 C 语言(不是 C++)。应删除最低索引重复项并保留单个最高索引。
谢谢!