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

不废话,直接上代码。。。

#include<stdio.h>

#include<string.h>
#include<stdlib.h>
#define  maxsize 20
void filter(const char*str1, int length, char* str2)
{
bool hash[26] = { 0 };
int i, j;
for (i = 0, j = 0; i < length; i++)
{
if (hash[str1[i] - 'a'] == false)
{
hash[str1[i] - 'a'] = true;
str2[j++] = str1[i];
}
str2[j] = '\0';
}
}
void zip(const char* str1, int length, char* str2)
{
int i, j, k, num;
char buff[20];
for (i = 0, k = 0; i < length; i++)
{
num = 0;
for ( j = i + 1; i < length; ++j)
{
if (str1[i] == str1[j])
num++;
else
break;
}
if (num != 0)
{
memset(buff, 0, sizeof(buff));//将buff 初始化:
_itoa_s(num + 1, buff, 10);
strcpy_s(str2+k,sizeof(str2+k), buff);
k += strlen(buff);
}
str2[k++] = str1[i];
i = i + num + 1;
}
str2[k] = '\0';
}
int main()
{
char str1[] = { "aaebbc" };
char str2[] = { "aabaa" };
char str3[maxsize] = { 0 };
char str4[maxsize] = { 0 };
filter(str1, strlen(str1), str3);
zip(str2, strlen(str2), str4);
puts(str4);
puts(str3);
return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值