读书人

初学者求指点一个小东西一下 绝对结贴

发布时间: 2012-04-18 15:01:59 作者: rapoo

菜鸟求指点一个小东西高手指点一下 绝对结贴给分
要求是随便输入一串字符(如果能做出无限长度的更好,不行的话小于50个字符也行) 其中一样且挨在一起的字符相抵消 例如输入assd则输出ad 如果输入asddsf则输出af 我自己写了一个脚本 结果很差漏洞别处 估计是算法上的错误;高手指点一下。
#include<stdio.h>
int main()
{
int a,b;
char c[50];
for(a=0,b=0;(c[a]=getchar())!='\n';a++)
{
if(c[a]==c[a-1])
{
a--;
b=1;
}
else
{
if(b==1)
{
a-=2;
b=0;
}
}
}
for(;a<50;a++)
c[a]=32;
printf("%s",c);
return 0;
}

[解决办法]
数组也可以做的啊,你申请一个另外的数组,一个一个存进去
other[];
如果前面一个跟要存的一样就删除前面的一个!懂了吧?
[解决办法]
稍作改动,还是可以做到:

C/C++ code
#include<stdio.h>int main(){    int a=-1,a1=-1;    char b;    char c[500];    while((b=getchar())!='\n')    {        if (a==-1||c[a]!=b)         //  如果栈空或当前字符与栈顶字符不等        {            if (a1==-1||c[a1]!=b)   //  且与刚出栈字符也不相等            {                c[++a]=b;           //  则当前字符入栈                a1=a;            }                       //  若与刚出栈字符相等,则消去当前字符        }        else            a1=a--;                 //  否则栈顶字符退栈,与当前字符抵消    }    c[++a]='\0';    printf("%s",c);    return 0;} 

读书人网 >C语言

热点推荐