第一类型:通过键盘输入一串小写字母(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");
}