删除字符数组中的重复字符

植魂人 2017-07-25 08:17:17

1
2 #include<stdio.h>
3 #include<string.h>
4
5 int main()
6 {
7 char i,j,k,str[50];
8 printf("Please input string:");
9 scanf("%[^\n]",str);
10 char *p = str;
11 k = strlen(str);
12 for(i = 0;i < k;i++)
13 {
14 for(j = i + 1;j < k;j++)
15 {
16 if(*(p+i) == *(p+j))
17 {
18 *(p+j) = *(p + j + 1);
19 k--;
20 j--;
21 i--;
22 }
23 }
24 }
25 str[k] = '\0';
26 printf("%s\n",str);
27 return 0;
28 }

编译没大问题,就是不能全部都满足条件,求解答。
...全文
592 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-07-26
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

int main()
{
    int i, j, k, len;
    char str[50];
    int ch;

    printf("Please input string:");
    scanf("%[^\n]",str);
    char *p = str;
    len = strlen(str);

    for (i = 0; i < len; i++) {
        ch = p[i];
        for (j = i+1; j < len; j++)
            if (ch == p[j]) {
                for (k = j; k < len; k++)
                    p[k] = p[k+1];
            }
    }

    puts(p);
    printf("%s\n",str);




#if 0


    for(i = 0;i < k;i++)
    {
        for(j = i + 1;j < k;j++)
        {
            if(*(p+i) == *(p+j))
            {
                *(p+j) = *(p + j + 1);
                k--;
                j--;
                i--;
            }
        }
    }
    str[k] = '\0';
    printf("%s\n",str);
#endif
    return 0;
}
i, j , k一般用于循环变量;一般被定义为int类型
jena_wy 2017-07-26
  • 打赏
  • 举报
回复
可以把不重复的字符另外放到一个数组中。
jianyue--- 2017-07-25
  • 打赏
  • 举报
回复
如果只是ascii字符,可以试一下下面的代码。

#include<stdio.h>
#include<string.h>
int main()
{
char str[50]="f4gg2gjkll2k*))kg  7i7nhjt";
char strOut[50];
int flg[8],i,r,c,k;
memset(flg,0,32);
k=0;
for(i=0;str[i]!='\0';++i)
{
   r=str[i]/32;
   c=str[i]%32;
   if((flg[r] & (1<<c))==0)
   {
       flg[r] |= (1<<c);
       strOut[k]=str[i];
      ++k;
   }
}
 strOut[k]='\0';
printf("%s\n%s\n",str,strOut);


return 0;
}
真相重于对错 2017-07-25
  • 打赏
  • 举报
回复
挑剔的说这个题目出的有问题 比如 abdefa 去除重复后 到底是 abdef 还是 bdefa
战在春秋 2017-07-25
  • 打赏
  • 举报
回复
引用
求解答
代码基本上不用变动,就是里层循环的写法有变化,如下: 不算复杂,就不加注释了,希望有帮助。
int main()
{
	char str[50];
	int i, j, k, n;
	printf("Please input string:");
	scanf("%[^\n]", str);
	char *p = str;
	k = strlen(str);
	for (i = 0; i < k; i++)
	{
		for (j = i + 1; j < k; )
		{
			if (*(p + j) == *(p + i))
			{
				for (n = j; n < k; n++)
				{
					str[n] = str[n + 1];
				}
				k--;
			}
			else {
				j++;
			}
		}
	}
	str[k] = '\0';
	printf("%s\n", str);
	return 0;
}

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧