能过,网上代码很多,我就重点写一下如何消除字符;本方法比较笨,追求高效的童鞋出门右转···
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
char a[105],b[105],c[105];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",a+1);
memset(b,'\0',sizeof(b)); //先对b数组进行清零
a[0]='e',b[0]='e';
int len1,len2,len,flag=0;
len1=strlen(a);
a[len1]='e'; //先对a字符串两边各加一个字符(随便),防止访问时超界
while(1)
{
int i,j=1;
len=strlen(a);
memset(b,'\0',sizeof(b)); //每循环一次b数组必须清零,否则影响下一次b的值
b[0]='e';
for(i=1; i<len; i++)
{
if(a[i]!=a[i-1]&&a[i]!=a[i+1]) //如果跟两边的都不一样,那么这个字符输入b中
{
b[j]=a[i];
j++;
}
}
b[++j]='e';
if(strcmp(a,c)==0||a[1]=='e') //a[1]=='e' 的原因在下面
break;
else
strcpy(c,a);
strcpy(a,b);
}
printf("%s\n",a);
}
}
a[1]=='e' 就break 是为了防止当如AAA这样的例子输出是 ee 但是ee又会进入下一次循环成e