C语言实现删除整形数组里的相同的数

2023-05-16

#include<stdio.h>
int main()
{
	int arr[]={1,1,1,1,1,2,2,2,2,2};
	int i=0,j=0,k=0;
    int sz=sizeof(arr)/sizeof(arr[0]);
    for(i=0;i<sz;i++)
    {
    	for(j=i+1;j<sz;j++)
    	{
    		if(arr[j]==arr[i])
    		{
    			for(k=j;k<sz-1;k++)
    			{
    				arr[k]=arr[k+1];
				}
				sz--;//这里要注意要有sz--和j-- 解释在下文
				j--;
			}
		}
	}
	for(i=0;i<sz;i++)
	printf("%d ",arr[i]);
	
	
	
	
	return 0;
}

原理:将数组中的第一个数与其后面的数相比较,如果相等的话就把第二个数后面的数往前替换掉从第二个数开始的每个数,也就是把那个相同的数覆盖或者理解为删除掉,例如 1123 开始1与1比较两者相等 后面的2替换掉第二个1,3又替换掉前面2的位置 第2个1就相当于被删除了此时要注意数组的大小要减1 也就是代码中的sz-- ;

注意:这里说一下为啥还要j--,举个例子111234  按照上面的逻辑第二个1会被删掉大小由6变成了5 

数组就是11234   假如没有j--的话 判断的循环会继续进行,j会++一下变成2,arr[2]就是指向数组的第三个数了也就是此时数组中的2了  显然11234 中的第二个1被遗忘了 最后的结果就是11234

但是如果j--了一下,就会与j++相互抵消了 就相当于没有变化,按照上面的例子 j还是会指向第一个1后面的元素 也就是第二个1了 这样比较后11234中第二个1 也会被删除 最终的结果就是1234而不是11234了 。

writer:white_to_sg 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言实现删除整形数组里的相同的数 的相关文章

随机推荐