проверять каждый элемент друг к другу в указателе массива - PullRequest
1 голос
/ 17 февраля 2011

C Эксперты, у меня есть массив указателей на строки.Мне нужно сравнить каждый элемент массива со всеми другими элементами массива и выдать ошибку, если они одинаковы.Вот фрагмент кода, который я написал и застрял.Пожалуйста, помогите мне.

# define FOUND 1
# define NOTFOUND 0

int k,flag,a;
char cmp_string[10]; //used to get one array element to compare with all other array elements

char *values[]={010,020,030,040}; //valid case that's how it should be
char *vales[]={010,020,020,030}; wrong or throw error because in array i should have only unique values

int size=4;
for(k=0; k<=size;k++){
    strcpy(values[k],cmp_string);
    flag=NOTFOUND;

    int counter=k+1;

   for(int n=counter;n<=size;n++)
   {
       a=((strcmp(values[n],cmp_string) || (strcmp(values[k-1],cmp_string)))
      // stuck here what if k value is 2 I wont be able to compare with zero or first element of array.

       if(a==0){
        throw error same name for the operation
        flag=FOUND;
        break;
   }
 }//for int n;

}//for int k;

if(flag==NOTFOUND){
    True or PASS
}
}

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Быстрое решение: сортируйте массив (используя, например, встроенную функцию qsort), затем сканируйте его, сравнивая соседние элементы;если два одинаковых, у вас есть повторение.

Вы также можете узнать до завершения сортировки, что у вас есть дубликаты, если в функции сравнения вы обнаружите, что два сравниваемых элемента одинаковы.

0 голосов
/ 17 февраля 2011

Если я правильно понимаю ваш вопрос, вы пытаетесь превратить strcmp во что-то, что возвращает ненулевое значение, если строки совпадают, и ноль в противном случае:

a = (strcmp(whatever) != 0) || (strcmp(whatever else) != 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...