【发布时间】:2021-11-27 13:55:12
【问题描述】:
我想出了一个从数组中删除重复项的代码,并希望它检查错误(例如,可以为数组索引设置 sizeof 吗)?
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
int main()
{
int a[] = {1,2,4,4,5,6,2,7, INT32_MAX};
int flag[sizeof(a)] = {0}, i=0,j=0;
while (a[i] != INT32_MAX ) {
if(a[i] != a[i+1])
a[j++] = a[i];
#if 0
if(0 == flag[a[i]]) {
flag[a[i]] = 1;
a[j++] = a[i];
}
#endif
i++;
}
for (i =0;i<j;i++)
printf("%d\n", a[i]);
};
【问题讨论】:
-
提示:你不需要
flags数组。 -
sizeof(a)是错误的。想想如果a包含一个大数字(例如 2000)会发生什么。你会在某个时候寻址flag[2000]....重写你的代码没有flag数组,你不需要它。 -
@Jabberwocky,确实尝试过没有标志数组的其他版本,但它似乎只适用于排序数组。
-
代码审查请求应发送至codereview.stackexchange.com
-
提示:你基本上需要 3 个嵌套循环:一个循环从 0 扫描数组到末尾,下一个内层循环搜索当前数字的重复项,最内层循环移动剩余的数字。一张纸和一支铅笔在这里最有帮助。
标签: arrays c loops duplicates integer