标题:DONE删去a中的重复字符
只看楼主
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
得分:0 
回复:(vbc)我的算法时间复杂度很高吗??????????虽说...
我觉得你的很好啊!
很容易懂.
但能告诉我strcat(a,&a[j]);是什么意思吗?

一分耕耘,一分收获。
2007-09-01 11:16
critaxu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-8-29
得分:0 

这是一个字符串函数.
原型:extern char *strcat(char *dest,char *src);

用法:#include <string.h>

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。


想改变不可能,只有努力!努力不等于成功,可是不努力,就一定不会成功。
2007-09-01 11:28
critaxu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-8-29
得分:0 
neverTheSame 算法不错~~~~~~~偶看懂了~~~~~~~~~
偶是新手

想改变不可能,只有努力!努力不等于成功,可是不努力,就一定不会成功。
2007-09-01 11:39
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
得分:0 


数组名就是符数组的首地址,字符数组以'\0'组束;
故a[j-1]='\0'就是将数组a分成两个数组,而a[j-1]='\0'就相当于把a[j-1]删除;
再用strcat(a,&a[j]);将两个数组连接起来.得到新的数组;

neverTheSame的对于不是字母的字符就没折了.


清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-09-01 12:15
critaxu
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2007-8-29
得分:0 
赞同LS呵呵,确实对于非字母的就比较麻烦

想改变不可能,只有努力!努力不等于成功,可是不努力,就一定不会成功。
2007-09-01 12:28
风之梦
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2007-8-31
得分:0 

我认为用二叉树要好的多。时间复杂度要小的多,只在构建二叉树的过程中就把重复数字去除了。

2007-09-01 12:37
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
得分:0 

那有多小能不能不用遍厉整个数组?
说是容易.


清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-09-01 13:25
cyhbp
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-8-27
得分:0 

#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();

}
我想这个是最好的!


2007-09-01 15:14
cyhbp
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2007-8-27
得分:0 
用这个算法,还能算出字符串中每个字符的个数。

2007-09-01 15:21
aoaoaoao
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-5-14
得分:0 


#include <stdio.h>
#include <malloc.h>

char allchar[256];

char *MALLOC(int i);
char *GetString(int i);
char *DelString(char *str);


char *MALLOC(int i)
{
char *ch;

ch=(char *)malloc(sizeof(char)*i);

if(ch==NULL)

{
fprintf(stderr," malloc() is not success!\n");

exit(1);
}

return ch;
}

char *GetString(int i)
{
int a;
char *p;

a=getchar();

if(a=='\n'||a==EOF)
{
p=MALLOC(i);

*(p+i-1)='\0';
return p;
}

else
{

p=GetString(i+1);
}

*(p+i-1)=a;
return p;
}
char *DelString(char *str)
{
char *str1,*str2;
str1=str2=str;

while(*str!=0)
{
if(allchar[(unsigned char)(*str)]==0)
{
allchar[(unsigned char)(*str)]=1;
*str1++=*str++;
}
else
str++;
}
*str1=0;

return str2;
}

int main(void)
{
char *str;

str=GetString(1);
printf("\n\nold strings: %s\n",str);

str=DelString(str);
printf("\n\nnew strings: %s\n",str);

free(str);

return 0;
}

2007-09-01 16:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-166905-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046100 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved