【问题标题】:memcmp to compare segments of an array (remove duplicates)memcmp 比较数组的段(删除重复项)
【发布时间】:2011-12-18 14:43:09
【问题描述】:

我已经研究了一段时间(在 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 是数组中元素的总数。 运行代码时不断出现分段错误。

谢谢大家的帮助!

【问题讨论】:

    标签: c qsort memcmp


    【解决方案1】:

    你写道:

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

    memcmp() 接受指针。您可能指的是 buffer+ibuffer+i+nValue 作为参数。如果这是答案,我很惊讶您的编译器没有对此发出警告。你激活警告了吗?

    【讨论】:

    • 成功了。太感谢了!!不,我的编译器 (gcc) 没有警告我
    猜你喜欢
    • 2017-06-09
    • 2014-12-16
    • 2017-12-31
    • 2011-11-05
    • 2013-02-02
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多