【发布时间】:2011-03-23 19:06:01
【问题描述】:
我有一个 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++)。应删除最低索引重复项并保留单个最高索引。
谢谢!
【问题讨论】:
标签: c algorithm arrays duplicates duplicate-removal