c语言编写一段去除字符数组中重复的字符的程序

#include<stdio.h>
void main()
{
int i,j,p,q;
char a[8]={'a','b','b','c','d','a','v','b'};
for(i=0;i<8;i++)
{
for(j=i+1;j<=8;j++);
if(a[i]=a[j])
{
do
{a[j]=a[j+1];j++;}
while(j<=8);
}
}
puts(a[8]);
}
这是我写的,输出的是乱码。帮忙看下哪错了吧谢谢了
我还是喜欢按自己的思路来。就是把每个字符依次和后面的字符比较,如果相同,就把后面的每一个字符都用它之后的字符替换。
留香给改的基本正确了,不过运行的时候最后多出来一个b,我不知道是哪错了。再给看看吧。一楼的兄弟改的运行后输出除了本该输出的内容外还有一串乱码,三楼的我看不懂。
#include<stdio.h>
void main()
{
int i,j,p,q;
char a[9]={'a','b','b','c','d','a','v','b','\0'};
for(i=0;i<8;i++)
{
for(j=i+1;j<=8;j++)
if(a[i]==a[j])
{
do
{a[j]=a[j+1];j++;}
while(j<=8);
}
}
puts(a);
}

判断,标志输入的字符是否重复的,如下代码:

#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");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-14
帮你改好了,有几个小错误,第一个定义一个字符数组最好后面加上一个\0,内嵌套的for循环后面多了一个分号
#include<stdio.h>
void main()
{
int i,j,p,q;
char a[9]={'a','b','b','c','d','a','v','b','\0'};
for(i=0;i<8;i++)
{
for(j=i+1;j<=8;j++)
if(a[i]==a[j])
{
do
{a[j]=a[j+1];j++;}
while(j<=8);
}
}
puts(a);
}本回答被提问者采纳
第2个回答  2010-12-14
感觉你没有理清思路
你可以在定义一个数组b[8],然后把数组a中的字符一次放入b中,如果有重复则不放入
下面是代码,devc++上运行通过
#include<stdio.h>
main()
{
int i,j,n,flag;
char a[8]={'a','b','b','c','d','a','v','b'};
char b[8];
b[0]=a[0];

n=1;
for(i=1;i<8;i++)
{
flag=0;
for(j=0;j<n;j++)
if(b[j]==a[i]) {flag=1;break;}
if(flag==0){b[n]=a[i];n++;}
}
b[n]='\n';
puts(b);
getchar();
}本回答被网友采纳
第3个回答  2010-12-14
算了,不给你改了,我给你写一个吧
#include<iostream>
using namespace std;
int main()
{
char ch[9]={'a','b','b','c','d','a','v','b'};
int i,j;
int count = 0;
for (i = 0; i < 9;i ++)//不要忘了最后还有个'\0'
{
for (j = i+1;j<9;j++)
{
if(ch[i]==NULL)
{
continue;
}
if (ch[i]==ch[j])//有相同的元素的话,将其替换为后面的非空字符,并将最后一个非空字符置空
{
ch[j] = ch[8-count];
ch[8-count] = NULL;
j--;
count++;
}
}

}
ch[9-count] = '\0';
for (i=0;i<8-count;i++)
{
cout<<ch[i];
}
system("pause");
}
第4个回答  2010-12-14
#include<stdio.h>
void main()
{
int i,j,m=0;//m记录重复的字符数
char a[8]={'a','b','b','c','d','a','v','b'};
for(i=0;i<8;i++)
{
for(j=i+1;j<7;j++)//多了一个分号
{
if(a[i]==a[j])//应该是==
{
++m;
for(int k=0;k<7;++k)
{
a[k]=a[k+1];
}
}
}
}
a[8-m]='\0';
puts(a);
}

c语言编写一段去除字符数组中重复的字符的程序
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....

C语言问题 把一个数组中的重复元素去掉
include <iostream> include <string> include <algorithm> using namespace std;去掉字符串中重复的字符并排序 int main(){ string input;while (cin>>input){ int count = 0; \/\/ 统计有多少个空格 for (int i = 0; i < input.size(); i++){ for (int j = i+1; j < input.size...

C语言 删除输入的数组中的重复元素(最多20个元素) 要求编写函数,且头...
include <stdio.h>\/\/ *n是数组元素个数 void Delete_Same(int a[], int *n){ int i, j; int tag[20] = {0}; \/\/tag[i]标记a[i]是否使用过 for(i = 0; i < *n; ++i) { if( tag[i] ) continue; else{ for(j = i+1; j < *n; ++...

C语言中删除字符串中的重复字符,然后输出新的字符串
include <stdio.h>#include <string.h>int main(){ char c,str[80]; int i=0,j,k,len; printf("input:"); gets(str); len=strlen(str); c=str[i]; while(c!='\\0') { for(j=i+1;str[j]!='\\0';j++) { if(str[j]==c) { for...

c语言排序后删除数组中重复的数字再排序输出
voidbubble_sort(char*str);intmain(){ charstr[SIZE];gets(str);delete_repeat(str);bubble_sort(str);puts(str);return0;} \/\/删除重复字符 voiddelete_repeat(char*str){ \/**判断数组内第i个字符是否与前i-1个字符存在重复:若重复,删除该字符,i之后的字符下标均减1,后重新判断新的第i...

c语言去掉重复的字符后输出.
if(str[i]==b[j]) break;\/\/如果str中的字符与已经放入b中的字符相同则终止循环 else if((str[i]!=b[j])&&(j==k-1))\/\/如果与已经放入b中的所有字符都不同则把字符放入b中 { b[k]=str[i];k++;\/\/每次往b字符串中放入一个字符k就加一 k是b字符串的个数 } } } b[k]='\\...

C语言程序:题目:从键盘输入一个字符串,按照字符顺序从小到大进行排序...
int i;gets(str1);\/\/读取一个字符串 for(i=0;str1[i];i++){ str2[str1[i]]=1;\/\/str1中每个字符的assic码作为str2的下标值,并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符 } for(i=0;i!=256;i++)if(str2[i]==1)\/\/判断数组中被str1填充的位置...

c语言:删去一维数组中所有相同的数, 使之只剩一个.求一完整正确程序
include<stdio.h>int fun(int a[],int n){ int i,j=0; for(i=1;i<n;i++) { if(a[j]!=a[i]) a[++j]=a[i]; } return j;}void main(){ int a[]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10}; int len,i; len=fun(...

C语言二维数组中删除数组中的重复元素
简单地统计重复元素和不重复元素,可以用1维数组。#include<stdio.h>void main(){int i,j,k;int a[50];int b[50],c[50];int n,flag=0;for (i=1;i<50;i++) c[i]=0;printf("Please enter 50 data\\n");for (i=0;i<50;i++) scanf("%d",&a[i]);n=0;b[n]=a[0]; c[n]=1;...

用C语言编写程序,找出用户输入的两个字符串中相同的子串,要求此输出的...
; return value;}\/\/ 利用bloomfilter算法将字符串s映射到位数组m中,并去掉重复的子串 void bloomfilter(unsigned char *m, char *s){ int i, j, hvalue, brepeat; char substr[32]; for(i = j = 0; ; i++) { if(s[i] != ' ' && s[i] !

相似回答