当前位置: 代码迷 >> C语言 >> DONE删去a中的重复字符
  详细解决方案

DONE删去a中的重复字符

热度:230   发布时间:2007-09-01 23:39:46.0

觉的VBC写的挺好的.
如果改成这样应该更容易看一些.不知道改成这样可有什么不对的地方.
#include<stdio.h>
#include<string.h>
void main()
{
char a[100];
int i,j;
printf("请输入一个字符串:");
scanf("%s",a);
for (i=0;i<strlen(a);i++)
{
for (j=i+1;j<=strlen(a);j++)
{
if (a[i]==a[j])
{
a[j]='\0';
strcat(a,&a[j+1]);
j=j-1;
}
}

}
printf("%s\n",a);
}

[此贴子已经被作者于2007-9-1 23:44:56编辑过]


----------------解决方案--------------------------------------------------------
回复:(cyhbp)#include void main()...

#include <stdio.h>
void main()
{
int i,j=0;
char a[100];
char b[75]={0}; /*字符对应的ASCII码的十进制 0=48 9=57 A=65 Z=90 a=97 z=122 122-48+1=75*/
printf("请输入一个字符串:");
scanf("%s",a);

for (i=0;i<strlen(a);i++)
if (b[a[i]-48]!='1')
{ b[a[i]-48]='1';
a[j]=a[i];j++; }
a[j]='\0';

printf("%s",a);
getch();

}
老大,if (b[a[i]-48]!='1')
{ b[a[i]-48]='1';
这一块不理解.你写了解释/*字符对应的ASCII码的十进制 0=48 9=57 A=65 Z=90 a=97 z=122 122-48+1=75*/
但我还是不懂.请讲一下嘛?谢谢~~


----------------解决方案--------------------------------------------------------
以下是引用vbc在2007-8-31 21:09:39的发言:
#include<stdio.h>
#include<string.h>
void main()
{
char a[100];
char c;
int i,j;
printf("请输入一个字符串");
scanf("%s",a);
for (i=1;i<strlen(a);i++)
{
c=a[i-1];
for (j=i+1;j<=strlen(a);j++)
{
if (c==a[j-1])
{
a[j-1]='\0';
strcat(a,&a[j]);
j=j-1;
}
}

}
printf("%s\n",a);
}

这个错误..输入a a a a jifij ji ji j iabc
----------------解决方案--------------------------------------------------------

以下是引用mayi2007在2007-9-2 15:29:19的发言:

这个错误..输入a a a a jifij ji ji j iabc

#include<stdio.h>
#include<string.h>
void main()
{
char a[100];
int i,j;
printf("请输入一个字符串:");
gets(a); //把printf("%s".a)换成gets(a)
for (i=0;i<strlen(a);i++)
{
for (j=i+1;j<=strlen(a);j++)
{
if (a[i]==a[j])
{
a[j]='\0';
strcat(a,&a[j+1]);
j=j-1;
}
}

}
printf("%s\n",a);
}
这样就可以了



不过小弟也明白gets()和scanf("%s",a)的区别,

[此贴子已经被作者于2007-9-2 16:10:54编辑过]


----------------解决方案--------------------------------------------------------
回复:(zzxwill)

#include <stdio.h>
void main()
{
int i,j=0;
char a[100];
char b[91]={0}; /*初始化数组b,字符对应的ASCII码的十进制 0=48 z=122 外加一个空格32 122-32+1=91*/
printf("请输入一个字符串:");
gets(a); /* scanf忽略空格以后的字符 */
for (i=0;i<strlen(a);i++)
if (b[a[i]-32]!='1') /*如果第一个字符a[0]是空格,那么a[0]的值是32,b[a[i]-32]=b[32-32]=b[0]。*/
{ b[a[i]-32]='1'; /* 执行此句后,b[0]=='1',如果字符串中还有空格,那将进不了if语句,从而过滤重复字符。*/
a[j]=a[i];j++; }
a[j]='\0';

printf("%s",a);
getch();

}

/*b[a[i]-32]代表值为32到122字符在数组b中的位置,如48的字符为b[48-32]=b[16],数组b中各元素的值不是'0'就是'1',以确定该字符是否出现过。*/


----------------解决方案--------------------------------------------------------
我也不想算了,但一般认为有嵌套循环的算法不如没有的。呵呵,我也是学了点皮毛。
----------------解决方案--------------------------------------------------------
  相关解决方案