华为机试 - 字符串去重复字节/字符串去连续重复字节

来源:互联网 发布:java项目开发视频 编辑:程序博客网 时间:2024/05/20 21:46

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

比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:

void stringFilter(const char *pInputStr,long lInputLen, char *pOutputStr);

【输入】 pInputStr:输入字符串

lInputLen: 输入字符串长度

【输出】 pOutputStr:输出字符串,空间已经开辟好,与输入字符串等长;

#include <iostream>#include <climits>#include <algorithm>using namespace std;void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr){int count[256]={0};size_t index=0;for(int i=0;i<lInputLen;i++){if (count[pInputStr[i]]==0){count[pInputStr[i]]=1;pOutputStr[index++]=pInputStr[i];}}}int main(){long inputLen;cin>>inputLen;char *str=new char[inputLen]();char *strOut=new char[inputLen]();for(int i=0;i<inputLen;i++)cin>>str[i];stringFilter(str,inputLen,strOut);cout<<strOut<<endl;system("pause");return 0;}

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".

2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"

 

要求实现函数:

void stringZip(const char*pInputStr, long lInputLen, char *pOutputStr);

 

【输入】 pInputStr: 输入字符串

lInputLen: 输入字符串长度

【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

#include <iostream>#include <climits>#include <algorithm>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr){if(pInputStr==NULL||lInputLen==0) return;size_t index=0;char prev=pInputStr[0];int count=1;for(int i=1;i<lInputLen;i++){if (prev!=pInputStr[i]){if(count!=1)pOutputStr[index++]=count+'0';pOutputStr[index++]=prev;prev=pInputStr[i];count=1;}else{count++;}}if(count!=1)pOutputStr[index++]=count+'0';pOutputStr[index]=prev;}int main(){long inputLen;cin>>inputLen;char *str=new char[inputLen]();char *strOut=new char[inputLen]();for(int i=0;i<inputLen;i++)cin>>str[i];stringZip(str,inputLen,strOut);cout<<strOut<<endl;system("pause");return 0;}


0 0
原创粉丝点击