标题:删除重复字符
只看楼主
chunzhuyitou
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-12-4
结帖率:66.67%
已结贴  问题点数:20 回复次数:8 
删除重复字符
输入:

输入要检查的字符串,长度不超过100个字符。例如:abacaeedabcdcd。

输出:

删除重复字符后的字符串。例如:abced

我这个输入abcddcba,输出abcdaaaa,想问错在哪?

#include<stdio.h>
#include<string.h>
int main()
{int i,j,k;
char a[100];
gets(a);
for(i=0;i<strlen(a);i++)
{
    for(j=k=i+1;j<strlen(a);j++)
    {if(a[j]!=a[i])
    a[k++]=a[j];}
    }a[k]='\0';
printf("%s",a);
}
搜索更多相关主题的帖子: 删除 重复 字符 输入 include 
2017-12-04 11:10
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
k 的初值不对,其它错误也多,不如重写

程序代码:
#include <stdio.h>

int main( void )
{
    char a[102];
    fgets( a, sizeof(a)/sizeof(*a), stdin );

    _Bool mask[256] = { 0 };
    for( size_t i=0; a[i]!='\0'; ++i )
    {
        unsigned char c = a[i];
        if( !mask[c] )
        {
            putchar( c );
            mask[c] = 1;
        }
    }

    return 0;
}



[此贴子已经被作者于2017-12-4 13:34编辑过]

2017-12-04 11:51
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:10 
https://bbs.bccn.net/thread-421637-3-1.html liufashuai朋友写的程序非常好,你可以参考一下。我帮你贴上来。
程序代码:
#include<stdio.h>


int main(void)
{
    char check[127] = {0};
    char inString[1024]={0};
    char ret[100] = {0};
  

    int i = 0,k = 0;

    printf("Please input the string:");
    scanf("%s",inString);

    for(; inString[i] ; i ++)
    {
        check[inString[i]] ++;
        if(check[inString[i]] == 1)
        {
            ret[k ++] = inString[i];
        }
    }

    puts(ret);

    return 0;
}

2017-12-04 14:44
chunzhuyitou
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-12-4
得分:0 
回复 2楼 rjsp
谢啦
2018-01-18 20:51
chunzhuyitou
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-12-4
得分:0 
回复 3楼 虫眼
谢谢大神们
2018-01-18 20:51
li384022
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:102
专家分:176
注 册:2017-12-29
得分:0 
回复 3楼 虫眼
for循环看不懂  可否讲解一下
2018-01-19 10:21
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:0 
回复 6楼 li384022
for(; inString[i] ; i ++)  只要inString[i]里面不是NULL,这个就一直循环,就是一个访问数组所有元素的方法,写的很巧妙。
2018-01-21 10:23
章邯
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:43
注 册:2016-12-18
得分:0 
#include <stdio.h>
#include <string.h>

int main(int argc, char* argv[])
{
    char string[100];
    scanf("%s",string);
   
    char buff[100]={0};
    int i=0;
    int j=0;

    for(i=0;string[i]!='\0';i++)
    {
        char ch=string[i];

        if(NULL == strchr(buff,ch))
        {
            buff[j++]=ch;
        }
        else
        {
            i++;
        }
    }
   
    printf("%s\n",buff);
    return 0;
}


        
/*
**三楼能注释一下for循环里的几行吗,看不懂?
*/
2018-01-21 12:01
虫眼
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:10
帖 子:314
专家分:1121
注 册:2017-11-29
得分:0 
感觉这个写的太随意
程序代码:
char ch=string[i];  //从输入的数组中取值。 我bb一下,char ch是定义了一个ch变量,但这种随用随定义的方法不好,所有的定义都应放在程序的开始,现在的编译器都不支持这种写法,vc6害死人。

        if(NULL == strchr(buff,ch))  //判断ch与buff数组里面的元素是否重复。
        {
            buff[j++]=ch;如果buff里没有重复的元素就把ch的值放入进去并j++。
程序代码:
}
        else
        {
            i++; //有重复就指向下一个元素。
        }
2018-01-21 12:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483087-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.090360 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved