Как изменить один массив в другой при отмене повторяющихся переменных? - PullRequest
0 голосов
/ 20 декабря 2010

Я новичок в программировании, и мне было поручено создать функцию, которая помещает один массив в другой по следующим критериям: переменная в массиве назначения будет повторяться только один раз, а массив источника и назначения будет тот же размер. функция, которую я придумал:

int RemoveDup (int src[],int dst[]) 
//recive two array compare them and copy the src array to dst,and only the none reacuring 
//numbers,the arrays must be from the same size

{
int size_src;
int size_dst;
int i,n=0;
size_src = sizeof(src)/sizeof(int);//determine the size of source array
size_dst = sizeof(dst)/sizeof(int);//determine the size of destination array
if (size_src = size_dst);//checks that the array are in the same size
{
for(i = 0;i < size_src;i++)//the loop for advancing the copying process
{
dst[i] = src[i];
}
while (i<size_dst)
{
dst[i] = dst[i++];

if (dst[i] = dst[i++])//relay on the fact that if the function will find a similar varibale, the tested varibale will be set to 0 and the other one will come out clean in the check
dst[i] = 0;//eliminating the varibale in that specific address
}
}


return dst [i];

но, похоже, он не работает и понятия не имеет, в чем дело. любая помощь или подсказка будут оценены.

Ответы [ 3 ]

2 голосов
/ 20 декабря 2010

Я заметил, что вы используете sizeof(src) в функции, которая принимает int src[] в качестве параметра.Это не делает то, что вы думаете, что делает.В C размер массивов не передается функциям вместе с самим массивом (в отличие от некоторых других языков, с которыми вы, возможно, знакомы).Вы должны будете передать фактический размер как отдельный параметр.

Кроме того, некоторые операторы printf() определенно помогут вашим усилиям по отладке.Убедитесь, что значения - это то, что, по вашему мнению, должно быть.Надеюсь, у вас есть доступ к интерактивному отладчику, который, вероятно, будет очень полезен и для вас.

0 голосов
/ 21 декабря 2010

на самом деле можно заставить функцию получать массив, а не указатель (учитывая, конечно, размер массива заранее определен).

, поэтому вы можете использовать:

int RemoveDup(int src[M],int dst[N]){
     .
     .
     .
return whatever;

Я согласен, хотя использование указателей лучше.На мой взгляд, вы должны написать рекурсивную функцию, чтобы сделать это, используя, конечно, указатели.так что следующий вызов (* src + 1), так что вы смотрите на следующую ячейку.условие выхода тогда:

if (sizeof(src) == 0) {
 //exit recursion statement.
}
0 голосов
/ 20 декабря 2010

В C вы не можете объявить функцию, которая принимает параметр, который является массивом. Когда вы используете декларатор массива в качестве параметра функции, тип автоматически настраивается на соответствующий тип указателя. Любой явный размер массива (если указан) отбрасывается.

Другими словами, когда вы используете это:

int RemoveDup (int src[],int dst[])

это точно эквивалентно этому:

int RemoveDup( int *src, int *dst )

Теперь должно быть очевидно, почему sizeof(src)/sizeof(int) не выполняет вычисления, которые вы хотели сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...