C语言 求高手帮我看看程序哪里错了,删除重复字符

#include <stdio.h>
#include <string.h>
#define N 256
int main()
{
char str[N];
int i,j,n,k=0,flag=1;
scanf("%s",str);
n=strlen(str);
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
if(str[i]!=str[j])
flag=1;
else flag=0;
}
if(flag!=0)
{
str[k]=str[i];
k++;
}
}
str[k]='\0';
printf("%s\n",str);
return 0;
}

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<memory.h>
#include<string>
#include<cstring>
using namespace std;
int main()
{
char s[200],str[200];
int i,len,count=0;
scanf("%s",s);
len=strlen(s);
for(i=0;i<len;i++)
{
if(s[i+1]!=s[i])
{
str[count]=s[i];
count++;
}
};
for(i=0;i<count+1;i++)
printf("%c",str[i]);
printf("\n");
return 0;
}
你的想法实在看不懂 给你一个吧 试试特殊案例 aabbccdd
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-06
问题比较大。。 没猜错的话,运行结果可以用一团糟来形容
对于每一个i,你只要检测到str[i]!=str[j] 你的 k就会进一位 这样直接改变了原有的数据,后面就乱七八糟了 换个思路吧
第2个回答  2013-04-06
调试没有问题啊!你想输出什么样的效果啊?也达到了删除重复字符得效果了啊!追问

我用VC++6.0运行,不能删除字符啊,重复的还是输出来

追答

我用的也是vc++6.0啊,我运行一点问题都没有,你把软件重启试试

第3个回答  2013-04-06
我用VC6.0只能删除连续的重复字符

C语言,猜字母游戏,允许存在重复字母,大家看看我程序哪里错了?
这是因为你mian函数的while 语句里只有两个if语句,第一个是找出字符串中第一个与输入字符匹配的元素的下标对吧??第二个就是找出接下来第二个匹配的元素的下标,这之后又开始新一轮循环了,又是从开头开始查找,所以你最多只能找到两个……还有你那个junk变量貌似没用到 ...

怎样用c语言编写删除重复字符的程序
程序的基本思路是把输入的字符串放到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;...

这个c语言代码错哪里了?
3、将字符常量与字符串常量混淆 char c; c=“a”;在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a’和‘’,而把它赋给一...

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语言程序:题目:从键盘输入一个字符串,按照字符顺序从小到大进行排序...
并把对应位置填充为1,同一个字符的assci值相同,所以这样就去掉了重复字符 } for(i=0;i!=256;i++)if(str2[i]==1)\/\/判断数组中被str1填充的位置,填充的是非0值,没填充的是0值 printf("%c",i);\/\/输出str2的下标值,对应str1中的字符值 putchar('\\n');return 0;} ...

C语言,这个错哪里了?
1、switch括号里是表达式或整数或字符(字符在内存中也是整形数ASCII码)。2、case后面要跟整形常量,包括字符和枚举常量。如非要用switch,可改成如下代码:include <stdio.h> include <stdlib.h> int main(){ int x;printf("请输入分数:");scanf("%d",&x);switch(x\/10)\/\/ switch(表达式)...

C语言 删除重复字符这个程序为什么有j--
if(a[i]==a[j])\/\/前后字符相等,比如hello的ll相等了 { for(k=j;k<strlen(a);k++)\/\/遍历相等的字符之后的字符 { a[k]=a[k+1];\/\/从相等的字符,开始往前赋值,这里就是hello-->helo } j--;\/\/这个就是怕连续三个字符相等,因此要回退一个,例如,hello,经过上面的步骤变成hello,...

c语言,随机步法。下面代码哪错了,求指出。
if(initial[i-1][k]=='.') initial[--i][k] = ++c;break;case 2:if (i == 9) break;\/\/第9行时跳出switch if (initial[i+1][k] == '.') initial[++i][k] = ++c;break;case 3:if (k == 0) break;if (initial[i][k-1] == '.') initial[i][--k] = ++c;...

c语言小白,请问为什么我的这段代码输出结果不正确?应该怎么改呢?求具...
2、删除你的第17行,max初始值赋为:整体代码修改为:运行结果:具体代码为:include<stdio.h> int main(){ int x;scanf("%d",&x);int arr[32],num=0,i,p=0;int Num[10]={0},max=0;for(i=31;i>=0;i--){ arr[31-i]=(((x>>i)&1u)?1:0);} for(i=0;i<32;i++){...

c语言排序后删除数组中重复的数字再排序输出
voiddelete_repeat(char*str);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之后的字符...

相似回答