题目1描述(60分):
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。
要求实现函数:
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
【输入】 pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例
输入:“deefd” 输出:“def”
题目2描述(40分):
通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
要求实现函数:
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
我的测试程序:
<pre name="code" class="cpp">/*****************************
分析:给出的函数:输入字符串,不可改变,知道字符串长度,输出字符串,输出长度与输入长度相同
无返回值
方法:
功能1:查找相同字符:从后面的字符中,逐个循环比较相同字符
功能2:相同的舍弃,不同的逐个保存到pOutputStr字符串中
*****************************/
#include<iostream>
using namespace std;
void stringFilter(const char *pInputStr,long lInputLen,char *pOutputStr)
{
char ch;
bool flag=0;
int num=0;
for (int i=0;i<lInputLen;i++)
{
ch=pInputStr[i];
for(int j=0;j<i;j++)
{
if (ch==pInputStr[j])
{
flag=1;
break;
}
}
if (!flag)
{
pOutputStr[num++]=ch;
}
else
flag=0;
}
pOutputStr[num]='\0';
cout<<pOutputStr<<endl;
}
/*****************************
分析:给出的函数:输入字符串,不可改变,知道字符串长度,输出字符串,输出长度与输入长度相同
无返回值
方法:
功能1.需要对重复的字符进行计数num,同时需要转换为char类型:计算,使用while,转换使用+'0'形式
功能2.将结果保存到pOutputStr字符串中
*****************************/
void stringZip(const char *pInputStr,long lInputLen,char *pOutputStr)
{
int num=1;
char ch;
int k=0;
for (int i=0;i<lInputLen;)
{
ch=pInputStr[i];
while(pInputStr[++i]==ch)
num++;
if (num>1)
{
pOutputStr[k++]=num+'0';
pOutputStr[k++]=ch;
}
else
{
pOutputStr[k++]=ch;
}
num=1;
}
pOutputStr[k]='\0';
cout<<pOutputStr<<endl;
}
int main()
{
char *inputStr="aaabbacde";
cout<<strlen(inputStr)<<endl;
char outputStr[10];
stringFilter(inputStr,8,outputStr);
cout<<"-----------------------------"<<endl;
stringZip(inputStr,9,outputStr);
return 0;
}
有错误或更好的方法请指正,哈哈