怎样用c语言编写删除重复字符的程序

背景:
输入一个长度不超过 100 的字符串,删除串中的重复字符。

输入:

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

输出:

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

程序的基本思路是把输入的字符串放到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]中的字符串,也就是删除过重复字符之后的了
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-03-25

第2个回答  2013-09-15
#include<iostream>
#include<string>
using namespace std;
int main()
{string str;<br/>int i,j,n;<br/>cout<<"请输入字符串:";<br/>cin>>str;<br/>n=str.size();<br/>for(i=0;i<n;i++)<br/>for(j=i+1;j<n;j++)<br/>if(str[i]==str[j])<br/>str[j]=0;<br/>cout<<"删除后字符串:";<br/>for(i=0;i<n;i++)<br/>if(str[i]!=0)<br/>cout<<str[i];<br/>cout<<endl;<br/>return 0;<br/>}

如果输入字符串含有数字0,可以把语句str[j]=0; 中0换为其他
第3个回答  2013-09-15
楼主要的是C语言的代码,蜗牛*赤焰和询敏两位给的却是C++的,而且也不符合题目的要求。题目要求输出的是删除重复字符后的字符串,蜗牛*赤焰的代码则是把重复的字符置0,然后逐个输出不为0的字符。

#include <stdio.h>

void main ()
{
char s[101];
int i,j,k;

gets(s);
for(i=0;s[i];i++)
{
for(j=k=i+1;s[j];j++)
if(s[j]!=s[i])
s[k++]=s[j];
s[k]='\0';
}
printf("%s",s);
}
第4个回答  推荐于2017-12-16
如果是简单的字符串判断,就蜗牛*赤焰 的方法就可以了~~~
就如蜗牛*赤焰提到的如果字符串中含有判断的字符就会有点麻烦了,这时候可以试一下有一个标志位来判断,标志输入的字符是否重复的,如下面的程序:(这样会比较麻烦,下面的程序只供参考,一般的用蜗牛*赤焰的就可以了:))

#include <stdio.h>
#include <vector>
struct detail
{
char c;
int exist;//标志位
};
std::vector<detail> statics;
int check(char c)
{
std::vector<detail>::iterator ite = statics.begin();
for (; ite != statics.end(); ite++)
{
if((*ite).c==c)return 0;//输入的字符已经存在
}
return 1;//输入的字符未存在
};
void main()
{
printf("请输入字符串:");
char c;
scanf("%c",&c);
while((int)c!=10)//获取用户输入
{
detail temp;
temp.c = c;
temp.exist = check(c);
statics.push_back(temp);
scanf("%c",&c);
}
std::vector<detail>::iterator ite = statics.begin();//打印非重复的字符
for (; ite != statics.end(); ite++)
{
if((*ite).exist)printf("%c",(*ite).c);
}
printf("\n");
}本回答被网友采纳
相似回答