char a[]="dabcb";如何删去a中的重复字符?
谢谢~~
[此贴子已经被作者于2007-11-18 10:38:15编辑过]
char a[]="dabcb";如何删去a中的重复字符?
谢谢~~
[此贴子已经被作者于2007-11-18 10:38:15编辑过]
我建议建立一个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.如果出现,就将其删除.*/
#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);
}
}
}
我的算法时间复杂度很高吗??????????
虽说是用了两重循,但是要比两重循环的时间复杂度小得多,
因为我的循环控制变量不是从1~strlen(a)变化的,因为strlen(a)是变化的,
算起来不会比你们的慢