例如输入dasdhiwhif,则输出dashiwf
做到这个功能其实并不难,首先先将这个功能封装成一个函数,接收一个字符串arr,再创建一个去掉给定字符串中重复的字符的字符串temp,我们通过两个字符指针来进行操作(因为字符数组等于字符指针),首先遍历arr字符串中的字符,然后再遍历一遍temp[i],若arr[i]与temp中的任一字符相等,证明是重复字符,跳出该层遍历,若都不与temp的任一字符相等,那么显然此时temp[i]的i==strlen(temp),因此在该条件下,就确定arr[i]不是重复出现的字符,再定义一个j=0用来确定temp存储的非重复字符的位置,存储后将j++,指向下一个将要存储的字符,同时将该字符暂时存为'\0'(如果已经没有非重复字符需要存储则该处为字符串终点)。需要注意的是全程没有对两个字符指针做操作,而是通过变量以temp[i],arr[i]的方式进行操作,确保字符指针始终指向字符串开头,便于操作
char* deletechar(char* arr)
{
int i = 0;
char* temp = (char*)malloc(sizeof(char) * (strlen(arr)+1));//+1是因为还需要存放一个'\0'
int j = 0, k = 0;;
for (i = 0;i<strlen(arr); i++)
{
for (k = 0; k < strlen(temp); k++)
{
if (arr[i] == temp[k]) break;
}
if (k == strlen(temp))
{
temp[j] = arr[i];
j++;
temp[j] = '\0';//若已经没有需要存储的非重复字符,则使该字符串结束并且可以实时提供temp此时存储的长度
}
}
return temp;
}
int main()
{
char *x;
x = (char*)malloc(sizeof(char) * 80);//80表示长度为80的字符串
scanf("%s", x);
char* result = deletechar(x);
printf("%s", result);
free(result);
return 0;
}