自己编写了3种方法,都是使用指针的。(在LR中编写的)
1.先在原字符串进行比较,然后再放入目标字符串
Action()
{
char *srt="aadfeedeewwffggeccceweriiyiyyxxxxxpppuuyyyqwqqqerrrwuuuyyz";
char *desc;
desc=(char *)malloc(100*sizeof(char));
fun(srt,desc);
lr_output_message("%s",desc);
free(desc);
return 0;
}
char *fun(char *str,char *desc)
{
int i,j;
int len=strlen(str);
for(i=0;i<len;i++) //遍历字符串
{
for(j=1;j<len-i;j++)//匹配原字符串后面的所有字符
{
if(*str==*(str+j))
{
break; //如果原字符串和其后的字符串有相同的,则不再查找,该字符不放入目标字符串中
}
}
if(*str!=*(str+j))
{
*desc=*str; //如果原字符串和其后的字符串均不同,则该字符不放入目标字符串中
desc++;
}
str++;
}
*desc='\0';
return desc;
}
2.先放入目标字符串,然后在目标字符串进行比较,是否需要继续放入
Action()
{
char *srt="aadfeedeewwffggeccceweriiyiyyxxxxxpppuuyyyqwqqqerrrwuuuyyz";
char *desc;
desc=(char *)malloc(100*sizeof(char));
fun(srt,desc);
lr_output_message("%s",desc);
free(desc);
return 0;
}
char *fun(char *str,char *desc)
{
int i,j;
int len=strlen(str);
char *p=desc; //新字符串放两个指针,一个用来移动,一个不动,做循环用
for(i=0;i<len;i++)
{
for(j=0;j<i;j++)
{
if(*str==*(p+j)) //放入之前,先遍历目标字符串中当前存入的所有值
{
break;
}
}
if(*str!=*(p+j)) //不重复,放入目标字符串
{
*desc=*str;
desc++;
}
str++;
}
*desc='\0';
return desc;
}
3. 先对字符串进行冒泡排序,然后进行去重
Action()
{
char str[]="aedbebfdebefggmh";
int len=strlen(str);
char *desc;
desc=(char *)malloc(len*sizeof(char));
delete(str,desc);
lr_output_message("去重后的自符串为:%s",desc);
free(desc);
return 0;
}
char *delete(char *srt,char *desc)
{
int i,j;
int len=strlen(srt);
char temp;
char *p=srt;
for(i=0;i<len;i++)
{
for(j=0;j<len-1;j++)
{
if(*(srt+j)>*(srt+j+1))
{
temp=*(srt+j);
*(srt+j)=*(srt+j+1);
*(srt+j+1)=temp;
}
}
}
lr_output_message("排序后的自符串为:%s",srt);
srt=srt+1;
while(*srt!='\0')
{
if(*srt!= *p)
{
*desc= *p;
desc++;
}
else
{
lr_output_message("%c",*p);
}
p++;
srt++;
}
if(*srt=='\0')
{
*desc=*p;
desc++;
}
*desc='\0';
return desc;
}