我正在尝试创建一个清除我的数组中的数字副本的函数,但似乎我无法弄清楚我缺少的只是删除重复。 只是为了说明一点: 该功能不应该无效。
[1,2,3,3,4] -> [1,2,3,4]
[4,2,5,1]->[4,2,5,1]
[32,21,2,5,2,1,21,4]->[32,21,2,5,1,4]
我的数组中不应该是空格,函数应该返回 清理数组中的唯一元素,其中clean被定义为“不重复整数”
#include <stdio.h>
int generateUniqeList(int *list, int length);
int main()
{
int list[6] = { 5, 5, 4, 3, 2, 1 };
int duplicate = generateUniqeList(list, 6);
for (int i = 0; i < 6; i++)
{
printf("%d\n", list[i] - 1); //Here i am able to change the value of the duplicates with the - 1
}
getchar();
return 0;
}
int generateUniqeList(int *list, int length)
{
int duplicate = 0;
for (int i = 0; i < length; i++)
{
if (list[i] == list[i])
duplicate = list[i];
}
return duplicate;
}
答案 0 :(得分:1)
#include <stdio.h>
#include<string.h>
void generateUniqeList(int *list, int length);
int main()
{
int list[6] = { 5, 5, 4, 3, 2, 1 };
generateUniqeList(list, 6);
for (int i = 0; i < 6; i++)
{
printf("%d", list[i]);
//Here i am able to change the value of the duplicates with the - 1
}
putchar('\n');
return 0;
}
void generateUniqeList(int *list, int length){
int i ,j,k;
for (i = 0; i < length; i++) {
for (j = i + 1; j < length;) {
if (list[j] == list[i]) {
for (k = j; k < length; k++) {
list[k] = list[k + 1];
}
length--;
} else
j++;
}
}
}
答案 1 :(得分:0)
您正在做的是将列表中的每个int减去1.这不会删除重复项。要从数组中删除元素,请查看: How to remove an element from an array in C?
答案 2 :(得分:0)
这个功能没有意义。例如,此if语句中的条件
if (list[i] == list[i])
duplicate = list[i];
总是正确的,因为每个对象都等于它自己。
该函数不会修改数组。
您无法调整数组大小,但可以在数组的开头收集所有唯一元素并返回唯一元素的数量。
这是一个示范程序。
#include <stdio.h>
size_t generateUniqeList( int *a, size_t n )
{
size_t m = 0;
for ( size_t i = 0; i < n; i++ )
{
size_t j = 0;
while ( j < m && a[j] != a[i] ) j++;
if ( j == m )
{
if ( m != i ) a[m] = a[i];
++m;
}
}
return m;
}
int main(void)
{
int list[] = { 5, 5, 4, 3, 2, 1 };
const size_t N = sizeof( list ) / sizeof( *list );
for ( size_t i = 0; i < N; i++ ) printf( "%d ", list[i] );
putchar( '\n' );
size_t m = generateUniqeList( list, N );
for ( size_t i = 0; i < m; i++ ) printf( "%d ", list[i] );
putchar( '\n' );
return 0;
}
它的输出是
5 5 4 3 2 1
5 4 3 2 1