这是从数组中删除重复元素的算法。当数组的大小为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;
}
答案 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;
}