2011-10-31 2 views
1

Я работал над этим некоторое время (в C) и не могу понять это. У меня есть буфер, содержащий массив символов. Я использовал qsort для сортировки массива, и теперь все в правильном порядке. Теперь мне нужно удалить дубликаты (или просто распечатать список без дубликатов). Существует оговорка: символы группируются в группы из N символов (N, заданных пользователем). Таким образом, это не просто сравнение одного символа рядом с другим; он сравнивает их группы друг с другом.memcmp для сравнения сегментов массива (удалить дубликаты)

Так например: если вход AADDBBEECCEE и N задано пользователем 2, результатом будет AABBCCDDEE (с удалением одного из EE).

Я знаю, что мне нужно использовать memcmp, но я смущен синтаксисом. Я пытаюсь:

i=0; 
int result; 
int k; 
while(i<bufferSize-nValue){ 
    result = memcmp(buffer[i], buffer[i+nValue], nValue); 
    if(result==0){ 
     i=i+nValue; 
    } 
    else{ 
     for(k=0; k<nValue; k++){ 
      printf("%c",buffer[i]); 
      i++; 
     } 
    } 
} 

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

Спасибо за помощь, всем!

ответ

5

Вы писали:

memcmp(buffer[i], buffer[i+nValue], nValue); 

memcmp() принимает указатели. Вы, вероятно, имеете в виду buffer+i и buffer+i+nValue для аргументов. Если это ответ, я удивлен, что ваш компилятор не предупредил об этом. Вы активировали предупреждения?

+0

'& buffer [i]' и '& buffer [i + nValue]' также будет работать. –

+0

ЭТО РАБОТАЕТ. Спасибо большое!! Нет, мой компилятор (gcc) не предупредил меня об этом – pauliwago

Смежные вопросы