memcmp比较数组的片段(删除重复)

时间:2011-10-31 09:39:43

标签: c qsort memcmp

我一直在研究这个问题(在C中)并且无法解决这个问题。我有一个包含字符数组的缓冲区。我已经使用qsort对数组进行排序,现在它们都处于正确的顺序。我现在需要删除重复项(或者只打印出没有重复的列表)。 有一点需要注意:字符被分为N个字符组(用户给出的N)。所以它不仅仅是将一个字母与另一个字母进行比较;它将它们的组相互比较。

例如:如果输入是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++;
        }
     }
 }

其中buffer是数组,nValue是N,bufferSize是数组中元素的总数。 运行代码时我不断出现分段错误。

感谢大家的帮助!

1 个答案:

答案 0 :(得分:5)

您写道:

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

memcmp()需要指点。对于参数,您可能意味着buffer+ibuffer+i+nValue。如果这就是答案,我很惊讶您的编译器没有对此发出警告。你有没有激活警告?