-
字符串里删除连续相同的字符
void delsame(char* str)
{
char* p, * pp, * temp1, * temp2;
p = str;
for (; *p;)
{
pp = p + 1;
for (; *p == *pp;)//找出相同字符
{
pp++;
}
if (pp != p + 1)
{
temp1 = p;
temp2 = pp;
for (; *temp2;)//消除相同字符串
{
*temp1 = *temp2;
temp1++;
temp2++;
}
*temp1='\0';
}
else
p++;
}
}
-
删除首尾相同的字符
(1)右端字符优先删除
void delrl(char a[], int n)// 消除首尾字符相同的字符串,此处为优先消除右端字符
int i,k,j;
for(i=0;i<n/2;i++)
{
if (a[i] == a[n - 1])
{
j = n - 1 - i;
a[j] = a[j + 1];// 最右侧字符消除
for (k = i; a[k]; k++)//最左侧字符消除
{
a[k] = a[k + 1];
}
}
}
}
(2)左端字符优先删除
void dellr(char str[])// 消除首尾相同的字符,并且优先左边;
{
char* pl, * pr,*ptemp;
int i,j,k=7;
pr = str+6;
for (i = 0; i < 7/2; i++)
{
pl=str;
if (*pl == *pr)
{
ptemp=pl;
for (j = 0; j < k; j++)
{
*ptemp = *(ptemp + 1);
ptemp++;
}
k-=2;
pr--;
*pr = '\0';
}
pr--;
}
}
-
删除所有重复的字符
void delall(char a[])//消除所有重复的字符
{
int i, j, k;
for (i = 0;a[i]; i++)
{
for (j = i + 1; a[j]; j++)
{
if (a[i] == a[j])
for (k = j;a[k]; k++)
a[k] = a[k + 1];
}
}
}
如果知道数组长度再去删除数组相同项
int removeDuplicates(int* nums, int numsSize){
int left=0;int right;
for(int right=1;right<numsSize;right++){
if(nums[left]!=nums[right]){
left++;
nums[left]=nums[right];
}
}
return left+1;//返回删除后的数组大小
}