删除非连续重复字符

来源:互联网 发布:道路交通事故数据统计 编辑:程序博客网 时间:2024/05/22 08:08

算法思路:

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


以下代码在xcode 4.6.3上编译通过#include <stdio.h>#include <stdlib.h>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

0 0
原创粉丝点击