// ConsoleApplication8.cpp : 定义控制台应用程序的入口点。
//i am a Chinese ,so my English is so poor,i can't give you the english comment on the critical sentence ,therefore ,you can debug the programming
//if you desire to realize my solution :) good luck ,man
#include "stdafx.h"
#include <string.h>
int count=0;
char* delete1(char* str,int a[],int n);
char* Delete(char* str ,int flag)
{
if (flag==0)return str;
//"a3wddssfdrg";
int i=0;
int j=1;
int a[100]={0};//addr
int n=0;
while (str[i]!='\0')
{
if(*(str+i)==*(str+j))
{
count++;//记录重复的次数//
/* a[n]=i;*/
j++;
if(count==1)//过滤 相同的值只允许一个进入
{
a[n]=i;
n++;
}
}
else
{
i++;
*(str+i)=*(str+j);
j++;
count=0;//将count清零是为了下一次重新计算count
}
}
int len=n;//记录需要消除字符数组下标的大小
if(len==0)flag=0;
else flag=1;
char * strr=delete1(str, a,n);
Delete(str,flag);
return strr;
}
char* delete1(char* str,int a[],int len)
{
int i=0;
while(a[i]!='\0'&&a[i]!=0){
for(int m=a[i];str[m]!='\0';m++)
{
str[m]=str[m+1];
}
for(int h=i;h<len;h++)
{
a[h]--;
}
/*a[i]--;*/
i++;
}
// if(str[a[len-1]+1]=='\0')
// {
// str[a[len-1]]='\0';
// }
return str;
}
int _tmain(int argc, _TCHAR* argv[])
{
char strbuff[]="asaqddddqassfffdf";
char *str=Delete(strbuff,1);
printf("%s",str);
getchar();
return 0;
}
算法系列(一) 删除字符串中的相同字符片段
最新推荐文章于 2022-05-19 12:42:43 发布