删除非连续重复字符

算法思路:

假设当前待处理字符位于目标字符数组的Snow处,当前结果字符数组的可用位置为Pnow,检查是否出现连续相同字符,如果出现,则将最长连续相同字符放入Pnow开始的连续可用位置;如果不出现,则取Snow处字符与结果字符(Pnow-1)到0处的字符对比,使用一个变量作为指示,如果没有找到匹配,该变量值为-1;如果找到,这变量值为匹配值所在位置。使用变量mismatch标识是否匹配到。如果匹配到则处理下一个未处理字符,如果未匹配到,则将该字符装入结果字符数组的Pnow处。


以下代码在xcode 4.6.3上编译通过
#include 
#include 

typedef enum _bool{
    no =0,
    yes = 1
}bool;

int main(int argc, const char * argv[])
{
    char string[] = "ajsjdjjddddsssapoptfd";
    int Snow = 0,Pnow = 0,i=0,j=0;
    bool  mismatch = yes;
    char processed[100];
    while(string[Snow]){
        j = Snow;
        if (string[j]==string[++j]) {
            while ((processed[Pnow++]=string[Snow])==string[++Snow]);
        }else{
            i = Pnow;
            while ((--i>=0)&&(processed[i]!=string[Snow])) ;
            if (i==-1) {
                mismatch = yes;
            }else mismatch = no;
            if(mismatch){
                processed[Pnow++]=string[Snow];
            }
            ++Snow;
        }
    }
    processed[Pnow]='\0';
    printf("%s",processed);
    return 0;
}


结果:

ajsdjjjjddddssspotf

你可能感兴趣的:(算法)