问题:移除字符串中重复的字符
思路1:遍历字符串,看字符串是否已经存在,若不存在,则加入,如存在跳过
思路2:ASCII为长度为8的字符集,总共有256种可能。声明一个bool类型的数组a,先遍历一遍字符串,将每个字母对应的ASCII值作为a数组的下标,记录每个字符是否出现。若已出现则跳过,否则添加到字符串中。
#include <iostream>
#include<string.h>
using namespace std;
//遍历实现去掉重复的数
char * removeRepeat1(char * s)
{
if(s==NULL)
return NULL;
char * p=s;
int k=0;
for(int i=0;i<strlen(s);i++)
{
int j=0;
for(;j<k;j++)
{
if(s[i]==p[j])
break;
}
if(j==k)
{
p[k++]=s[i];
}
}
p[k]='\0';
return p;
}
//新增一个数组记录访问过的数
char * removeRepeat2(char *s)
{
if(s==NULL) return NULL;
bool *a =new bool[256];
memset(a,false,256);
char *p=s;
int k=0;
for(int i=0;i<strlen(s);i++)
{
if(a[int(s[i])])
continue;
a[int(s[i])]=true;
p[k++]=s[i];
}
p[k]='\0';
return p;
}
int main()
{
char a[100]="qqqqq";
char b[100]="abcd";
char c[100]="";
char d[100]="abcdabcdabcd";
/*
cout<<removeRepeat1(a)<<endl;
cout<<removeRepeat1(b)<<endl;
cout<<removeRepeat1(c)<<endl;
cout<<removeRepeat1(d)<<endl;
*/
cout<<removeRepeat2(a)<<endl;
cout<<removeRepeat2(b)<<endl;
cout<<removeRepeat2(c)<<endl;
cout<<removeRepeat2(d)<<endl;
return 0;
}
输出结果:
q
abcd
abcd