题目:
请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
比如字符串“abacacde”过滤结果为“abcde”。
示例
输入:“deefd” 输出:“def”
输入:“afafafaf” 输出:“af”
输入:“pppppppp” 输出:“p”
<span style="font-size:18px;">#include <iostream>
#include<string>
using namespace std;
void stringZip(char *pInputStr, long lInputLen, char *pOutputStr);
void main()
{ /*string s;
cout<<"请输入小写字母a-z"<<endl;
cin>>s;*/
char pInputStr[20];
cin>>pInputStr;
int lInputLen = strlen(pInputStr);
//char pOutputStr[lInputLen];是错误的!
char *pOutputStr = new char [lInputLen]();//记得对新建的空间进行赋值,否则由于在压缩之后的输出会出现乱码,因为压缩之后长度变短!
stringZip(pInputStr, lInputLen, pOutputStr);
cout<<pOutputStr<<endl;
}
//字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉
void stringZip(char *pInputStr, long lInputLen, char *pOutputStr)
{
//int k = 0;
for(int i = 0; i < lInputLen; i++)
{
if(pInputStr[i])
{
for(int j = i+1; j < lInputLen - i; j++)
{
if(pInputStr[i]==pInputStr[j] )
{
//pOutputStr[k]=pInputStr[i];
pInputStr[j]= NULL;
}
/*else
{
break;
}*/
}
}
}
int t = 0;
for(int k = 0; k < lInputLen; k++)
{
if (pInputStr[k])
{
*(pOutputStr++) = pInputStr[k];//注意这里的*
}
}
}
代码2:
该代码是网上借鉴,仅仅在此提供函数:
<pre name="code" class="cpp">void stringFilter(const char *p_str, long len, char *p_outstr)
{
int count[26]={0}; //计数器
char tmp;
int j=0;
for(int i=0;i<len;i++)
{
tmp = p_str[i]-'a';//这个地方注意。
//首先定义一个计数器count[26],用以存储a-z分别出现的次数,次数可以用p_str[i]-'a'表示。当一个字符出现,
//我们将它输出并在它的存储位置加1,当相同的字符又出现时,由于其存储计数器中的值不是0,所以不输出该字符。
if(count[tmp]==0)
{
count[tmp]++;
p_outstr[j++] = p_str[i];
}
}
p_outstr[j] = '\0';
}