算法 - 从数组中删除重复的元素

时间:2017-10-25 10:26:36

标签: c arrays algorithm

这是从数组中删除重复元素的算法。当数组的大小为5时,它可以工作,但是当我尝试添加更多元素时输出返回字母和 。例如,该数组的输出是'PBMZ!n OS'而不是'PBMZOS'。

int main ()
{

    char array[21]={'P','B','B','B','B','M','B','Z','P','P','Z','P','P','P','O','O','O','S','Z','P','M'};

    char newarray[21];

    newarray[0]=array[0];

    int count = 1;
    bool find = false;
    int let = 0;
    for(int i = 1; i < 21; i++,count++)
    {
        int j;  
        for(j = 0; j < count; j++)
        {
            if(array[i]!=array[j])
                find = true;
            else if(array[i]==array[j])
            {       
                find = false;
                break;
            }
        }
        if(find)
        {
            newarray[i]=array[j];
            let++;
        }
    }
    for(int i = 0; i <= 21; i++)
        printf("%c",newarray[i]);
    printf("\n");
    return 0;
}

3 个答案:

答案 0 :(得分:0)

您正在使用i来跟踪将每个新值放入newarray的位置,即使您没有为{{1}的每个值进行分配}。此外,即使i中存在重复项,您也会打印newarray的所有元素。

答案 1 :(得分:0)

您的代码中存在多个错误。我指的是那些错误。

class SomeSubscriber {

 public void before() {
    // ...
 }

 @Subscribe 
 public void run(SomeEvent e) {
    // ...
 }

 public void after() {
    // ...
 }
}

答案 2 :(得分:-1)

//首先i和j遍历给定大小的数组然后如果当前elemnt和之前的elemnt相同...则在[k] = a [k + 1]中它跳过重复的元素

包括

int main() {
char arr[21]={'P','B','B','B','B','M','B','Z','P','P','Z','P','P','P','O','O','O','S','Z','P','M'};
int i, j, k;
int size =sizeof(arr)/sizeof(arr[0]);// calculate size of array
//create unique array
for (i = 0; i < size; i++) {
  for (j = i + 1; j < size;) {
     if (arr[j] == arr[i]) {       // if any array elemnt matches with previous one
        for (k = j; k < 21; k++) {   
           arr[k] = arr[k + 1];     
        }
        size--;
     } else
        j++;
  }
}
 for (i = 0; i < size; i++) {
  printf("%c ", arr[i]);
}
return 0;
}