纠错:C语言:删除重复字符。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了纠错:C语言:删除重复字符。相关的知识,希望对你有一定的参考价值。

7-60 删除重复字符(20 分)
本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:
输出去重排序后的结果字符串。

输入样例:
ad2f3adjfeainzzzv
输出样例:
23adefijnvz

我的程序:

#include <stdio.h>
#include <string.h>
int main()
char Letter[128]=0;
char delete[]=0;
gets (Letter);
int size=sizeof(Letter)/sizeof(Letter[0]);
for(int i=0; i<size; i++)
delete[Letter[i]]=1;

for(int i=0; i<=128; i++)
if(delete[i]==1)
printf("%c", i);


printf("\n");

return 0;


测试结果:
多种错误

没注释, 还不如重新写一个

#include <stdio.h>
#include <stdlib.h>

int main()

char Letter[80];      //用于接收输入字符串 
int result[128]=0;  //相当于一张空的ASCII码表 
gets(Letter);          
int size=strlen(Letter);
int i,j=0;
for(i=0;i<size;i++)      //该循环好比 
                        //字符串中的每个字符在空ASCII码表中打勾 
result[Letter[i]]=1;

memset(Letter,'\\0',80);  //重置为空字符串 
for(i=0;i<128;i++)       //检索ASCII码表,逐个写入字符数组中 

if(result[i]==1)     //只要ASCII码表中打了勾的字符,就写入数组 

Letter[j++]=i;


printf("\\n%s",Letter);
return 0;

参考技术A 虽然其他给出了正确答案,但是考虑你的思路,修改代码如下:
#include <stdio.h>
#include <string.h>
int main()

    char Letter[128]= 0;
    char delete[128]= 0,;  //用于存储Letter[128]数组哪些属于相同字符,相同就置1.
    int i,j;
    gets (Letter);

    int size=strlen(Letter);        //确定输入字符串的个数
    for(i=0; i<size; i++)
    
        if(delete[i]==0)            //判断是否已经是相同字符
        
            for (j=i+1;j<128;j++)
            
                if(Letter[j]==Letter[i])    //判断两个字符是否相同
                

                    delete[i]=1;    //将第一个字符位置置1
                    delete[j]=1;    //
                
            
        
    


    for(i=0; i<=size; i++)
    
        if(delete[i]==0)                //判断是否属于相同字符,不是才打印
        
            printf("%c", Letter[i]);    //显示字符
        
    
    printf("\\n");

    return 0;


输入:ad2f3asjfeainzzzv
输出:d23sjeinv

参考技术B 程序的基本思路是把输入的字符串放到a[100]字符组中,然后把a[100]中所有不重复的字符添加到b[100]中,间接完成对字符串中的重复字符的删除

#include
void main()

char a[100],b[100];
//定义两个字符组,a[100]用来接收输入的字符串,b[100]用来存储不重复的字符
int pa=0,pb=0,i,flag;
scanf("%s",a);
//输入字符串到a[100]中,用scanf读入到a[100]中会自动在a[100]中字符串结束的地方加上'\0'
for(pa=0;a[pa]!='\0';pa++)
//for循环结束的条件是a[pa]==0,也就是从a[100]字符组中读取一个字符,直到没有

flag=1;
//flag是个标志符,当flag==1时,说明这个字符(下句中的a[pa])是第一次出现,应该加入到b[100]中
//如果flag==0,说明这个字符(下句中的a[pa])重复了,不应该加到b[100]中
for(i=0;i<pb;i++) if(b[i]==a[pa]) flag=0;
//把a[100]中读取的字符a[pa]与b[100]中的所有字符进行比较,如果b[i]==a[pa]
//说明这个字符已经在b[100]中了,也就是重复字符了,所有将flag=0,不能加入b[100]中
//如果a[pa]与b[100]中的所有字符都不相等,说明这个字条是第一次出现,应该加到b[100]
if(flag)

b[pb]=a[pa];pb++;

//如果flag==1,则将a[pa]这个字符加入到b[100]中,然后将pb加1

b[pb]='\0';
//当所有的不重复的字符都加入到b[100]中时,将b[100]中字符结束的地方加'\0',也就是b[pb]='\0'
//因为字符串都是民'\0'结尾的,所以加上这句
printf("%s\n",b);
//输出b[100]中的字符串,也就是删除过重复字符之后的了
参考技术C #include <stdio.h>
#include <string.h>
int main()
char Letter[128]=0;
char deleter[128]=0;
gets(Letter);
int k=0;
for(int i=0; i<strlen(Letter); i++)
for(int j=0; j<strlen(Letter); j++)
if(i!=j)
if(Letter[i]==Letter[j]) break;
else if(j==strlen(Letter)-1)deleter[k++]=Letter[i];
//对deleter排序代码
puts(deleter);
return 0;

C语言删除一个整型数组里面重复的元素

利用双重循环,将每个值依次与其后面的值相比较,如果有相同的则删除该元素即可。

删除时,可以使用将后面元素依次向前移动一位,同时总长度减一的方式。

参考代码如下:

int remove_repeat(int *a, int l)

    int i, j, k;
    
    for(i = 0; i < l; i ++)
    
        for(j = i+1; j <l; j ++)//对后面每个元素比较,去重。
        
            if(a[j] == a[i])//发现重复元素。
            
                for(k = j+1; k<l; k ++)//依次前移一位。
                    a[k-1] = a[k];
                l--;//总长度减一。
            
        
    
    
    return l;//返回新的长度值。
参考技术A int i, j;
int buf[] = 1,2,3,3,2,1;
int count = strlen(buf);
for(i = 0; i < count; i++)
for(j = i+1; j < count; j++)
if(buf[i] == buf[j])
buf[j] ^= buf[count];
buf[count] ^= buf[j];
buf[j] ^= buf[count];
count--;




buf[count] = '\0';

提供给你个思路 我没有调试,不过思路我觉得不错!

就是从数组里第一个元素开始找相同的,如果相同就把 相同元素和数组最后一位交换,下一个相同的就和数组倒数第二位交换,最后把 count位变成‘/0’,最后打印数组。
参考技术B 我跟你直接说思路吧,他们这样的双重循环数组太大的话很耗时间的,你可以,先给数组排序,然后删除多余的数就很耗操作了,只需要看相邻的数就可以了。 参考技术C 将第一个元素输出,再后面的一个个与前面的比较,有相等的就继续循环,不等的就输出,用for语句做 参考技术D int elimination(int a[], int count) //去除数组中重复的元素
int i, j, k;

for (i = 0; i < count; i++)
for (j = i + 1; j < count; j++)
if (a[j] == a[i])
for (k = j + 1; k< count; k++)
a[k - 1] = a[k];
count--;
j--;



return count;

以上是关于纠错:C语言:删除重复字符。的主要内容,如果未能解决你的问题,请参考以下文章

C语言删除多余字符

C语言纠错,说是找到一个或多个多重定义的符号

C语言删除数组重复数字

C语言中删除字符串中的重复字符,然后输出新的字符串

C语言,删除数组中的重复数字然后输出

c语言如何删除输出的最后的一个字符?