标题:DONE删去a中的重复字符
只看楼主
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
 问题点数:0 回复次数:25 
DONE删去a中的重复字符

char a[]="dabcb";如何删去a中的重复字符?
谢谢~~

[此贴子已经被作者于2007-11-18 10:38:15编辑过]

搜索更多相关主题的帖子: 字符 DONE 删去 
2007-08-31 20:20
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
得分:0 
#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);
}

清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-08-31 21:09
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
得分:0 

我建议建立一个26*2(大小写)个字母的结构体:
typedef
{
char word;
char have;/*0表示没有出现,1表示出现了*/
}WordType;
WordType wordMSG[52];
/*初始化函数*/
void InitWordMSG(void)
{
char tCharacter;
int i=0;
/*小写*/
for(tCharacter='a';tCharacter<='z';tCharacter++)
{
wordMSG[i++].word=tCharacter;
wordMSG[i++].have=0;
}
/*大写*/
for(tCharacter='A';tCharacter<='Z';tCharacter++)
{
wordMSG[i++].word=tCharacter;
wordMSG[i++].have=0;
}
return ;
}
/*判断某个字母是否出现:0--没有出现,1--出现,-1传入的不是字母*/
char CheckWordHave(char tGetChar)
{
if(tGetChar>='a' && tGetChar<='z')
return wordMSG[tGetChar-'a'].have;
else if(tGetChar>='A' && tGetChar<='Z')
return wordMSG[tGetChar-'A'+26].have;
else
return -1;
}

/*有了以上的模块,你就可以操作了.
遍历字符串,如果字母没有出现,成员have改为1.如果出现,就将其删除.*/


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-08-31 21:38
多维数组
Rank: 1
等 级:新手上路
帖 子:238
专家分:0
注 册:2006-8-16
得分:0 
上面的算法可以优化。

有事发邮件:tzp_1210@
2007-08-31 21:41
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
得分:0 
怎么优化,请赐教.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-08-31 21:46
多维数组
Rank: 1
等 级:新手上路
帖 子:238
专家分:0
注 册:2006-8-16
得分:0 
你的算法很好(和我想的一样),我是指vbc的算法,他的时间复杂度很高

有事发邮件:tzp_1210@
2007-08-31 21:56
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
得分:0 
回复:(vbc)#include#include
strcat(a,&a[j]);
这是什么意思?


一分耕耘,一分收获。
2007-09-01 07:03
zzxwill
Rank: 1
等 级:新手上路
帖 子:398
专家分:0
注 册:2007-8-15
得分:0 

#include<stdio.h>
#include<string.h>
struct words{
char word[80];
int num;
} passage[10];


main()
{
char s[]="This is C programming text This is C text";
char a[10][80];
int i,j,k,t,r,u;
i=j=k=t=u=0;

for(i=0;i<10;i++){
passage[i].num=1;
}

i=0;
while(k<strlen(s)){
while(s[k]!=' '&&k<strlen(s)){
a[i][j]=s[k];
j++;
k++;
}

a[i][j]='\0';
i++;
k++;
j=0;
}

for(t=0;t<i;t++){
puts(a[t]);
}
printf("\n\n");

for(t=0;t<i;t++){
strcpy(passage[u++].word,a[t]);

}

for(t=0;t<i-1;t++){
for(j=t+1;j<i;j++){
if(strcmp(passage[t].word,passage[j].word)==0){
passage[t].num++;
}
}
}

for(r=0;r<u;r++){
if(passage[r].num==1){
printf("%s \n",passage[r].word);
}
}
}


一分耕耘,一分收获。
2007-09-01 09:03
xiajianchen
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-1-22
得分:0 
回复:(zzxwill)回复:(vbc)#include#include
指针数组

一个人认清自己的路,整个世界为之让路!
2007-09-01 09:05
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
得分:0 

我的算法时间复杂度很高吗??????????
虽说是用了两重循,但是要比两重循环的时间复杂度小得多,
因为我的循环控制变量不是从1~strlen(a)变化的,因为strlen(a)是变化的,
算起来不会比你们的慢


清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-09-01 09:27



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




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

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