字符串中重复字符的处理

来源:互联网 发布:清华网络教育 编辑:程序博客网 时间:2024/06/04 17:55

第一类型:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 

比如字符串“abacacde”

过滤结果为“abcde”

#include<stdio.h>#include<string.h>void stringFilter(const char *inputstr,int len,char *outputstr){const char *p = inputstr;int a[26]={0};int i=0;for(i=0;i<len;i++){if(a[p[i]-'a'] == 0){*outputstr++=p[i];a[p[i]-'a'] = 1;}}}int main(){int len=0;char inputstr[1000];char outputstr[1000]={0};gets(inputstr);len = strlen(inputstr);stringFilter(inputstr,len,outputstr);printf("%s",outputstr);}

第二类型:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。 压缩规则: 1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。 2、压缩字段的格式为"字符重复的次数+字符"。

例如:字符串"xxxyyyyyyz"

压缩后就成为"3x6yz"。

#include<stdio.h>#include<string.h>void stringzip(const char *inputstr,int len,char *outputstr){const char *p = inputstr;int i=0;int num=1;for(i=0;i<len;i++){if(p[i]==p[i+1]){num++;}else{if(num==1)*outputstr++ = p[i];else{*outputstr++ = num + '0';<span style="color:#ff0000;">//超过10个的不符合。</span>*outputstr++ = p[i];}num = 1;}}}int main(){int len=0;char inputstr[1000];char outputstr[1000]={0};gets(inputstr);len = strlen(inputstr);stringzip(inputstr,len,outputstr);printf("%s\n",outputstr);printf("*******************************\n");int i=0;int num = 1;for(i=0;i<len;i++){if(inputstr[i] == inputstr[i+1]){num++;}else{if(num==1){printf("%c",inputstr[i]);}else{printf("%d",num);printf("%c",inputstr[i]);num=1;}}}printf("\n");}




0 0
原创粉丝点击