题目:
实现将字符串中的重复字符删除并且输出。
例如:
删除前字符串:aaabbbcccddd
删除后字符串:abcd
解题思路:
删除字符串中的重复字符有两个需要思考的点,第一个是怎么判断一个字符是重复字符,第二个是该如何对这个重复字符进行删除。
我的思路是,将原字符串存储到字符数组a中,进行删除后的字符串存储到字符数组b中。首先我先将字符数组a中的第一个字符取出,判断其是否在字符数组b中。因为我将字符数组b初始化为空,所以a中的第一个字符肯定不在b中,那么就将该元素赋值到b中。
接下来,重复上述操作,如果a中的字符在b中,说明之前已经把该字符赋给b一次了(即这个字符在a中已经是重复的字符了),那么就不进行赋值操作。如果a中的字符不在b中,那么就将该字符赋值到b中。
程序代码:
#include <stdio.h>
void del_fun(char *,char *);
int main(int argc, char *argv[])
{
char a[50];//存储删除前的字符串
char b[50] = {'\0'};//存储删除后的字符串
puts("请输入一串字符串:");
gets(a);
puts("删除重复字符后的字符串:");
del_fun(a,b);
puts(b);
return 0;
}
void del_fun(char *p,char *q)
{
int i = 0, j = 0, k = 0;
char t;
do{
t = p[i];//将字符串中第一个元素取出
for(j = 0; q[j] != '\0'; j++){
if(q[j] == t){//当字符串中的元素是被数组b存储过的元素时,提前结束for循环
break;
}
}
if(q[j] == '\0'){//这个条件是当上面for循环是正常结束时得到的,证明t没有被b数组存储过
q[k] = t;
k++;
}
i++;
}while(p[i] != '\0');//直到p[i] == '\0',证明将原来的字符串遍历结束了
q[k] ='\0';//字符串以'\0'结束
}
运行结果:
请输入一串字符串:
aaabbbcccddd
删除重复字符后的字符串:
acd
请输入一串字符串:
asdasdasd
删除重复字符后的字符串:
asd