题目要求:
删除与某个字符相邻且相同的字符,如,abcddef,删除相邻的相同字符d后变为: abcdef。
要求:输入字符串,输出删除后的结果。
咋一看,这个题目很简单,是历年全国计算机等级考试必考的题目之一,每年两次监考的时候就能看到这个题目。有些同学很快就做完,但有些不得要领不懂题意的同学也会抓耳挠腮。然而,今天面试,却让我丢大了人,没想到我也会卡壳,真是郁闷,这在平时可是在三五分钟三五行程序就搞定的事,不知今天哪根神经犯了毛病,一开始就想高明一把,用指针,而且还莫名其妙地写了个两重循环的,简单问题复杂化,一下子思路就不对了。最终还是在面试官的再三追问下我才发现我的程序不对。后来在这位面试官问我单重循环行不行,我才一下子想到,才三五分钟搞定。呵呵,不过在纸上写程序,还真是不习惯,但这更能够考察一个编程人员的功底。
现在把这个简单的程序贴出来,给各位要面试的朋友一点点提醒。:)不过,我想,绝大多数是不需要的,只有一个人需要,那个人就是我自己。
代码如下:

/**//************************************************************************
* 删除与某个字符相邻且相同的字符
* 如,abcddef,删除相邻的相同字符d后变为: abcdef
* 要求,输入字符串,输出删除后的结果
************************************************************************/

#include <stdio.h>
#include <string.h>

#define MAXCOUNT 100

//用数组,不用指针
char *delete_adjacent_char1(char *str)

...{
if(str==NULL)
return NULL;

int i=0,j=0;
int len=strlen(str);
for(j=i+1;j<len;j++)

...{
if(str[i]!=str[j])
str[++i]=str[j];
}
str[i+1]=0;

return str;
}

//2,3相同,只不过一个用while一个用for
char *delete_adjacent_char2(char *str)

...{
if(str==NULL)
return NULL;

char *p=str;
char *q=p+1;
while(*q)

...{
if(*p!=*q)

...{
p++;
*p=*q;
q++;
}
else

...{
q++;
}
}
*(p+1)=0;
return str;
}

//用for代码简洁
char *delete_adjacent_char3(char *str)

...{
if(str==NULL)
return NULL;

char *p=str;
char *q=p+1;
for(;*q;q++)

...{
if(*p!=*q)

...{
p++;
*p=*q;
}
}
*(p+1)=0;

return str;
}

//显示菜单
void show_menu()

...{
printf("---------------------------------------------");
printf("input command to test the program");
printf(" a or A : select func 1 to test");
printf(" b or B : select func 2 to test");
printf(" c or C : select func 3 to test");
printf(" q or Q : quit");
printf("---------------------------------------------");
printf("$ input command >");
}

void main()

...{
char sinput[10];
char str[MAXCOUNT];

show_menu();

scanf("%s",sinput);
while(stricmp(sinput,"q")!=0)

...{
if(stricmp(sinput,"a")==0 || stricmp(sinput,"b")==0 || stricmp(sinput,"c")==0)

...{
printf(" please input an string:");
scanf("%s",&str);
printf(" before deletion: %s",str);

char *pstr;
if(stricmp(sinput,"a")==0)
pstr=delete_adjacent_char1(str);
else if(stricmp(sinput,"b")==0)
pstr=delete_adjacent_char2(str);
else if(stricmp(sinput,"c")==0)
pstr=delete_adjacent_char3(str);

printf(" after deletion: %s",pstr);
}

//输入命令
printf("$ input command >");
scanf("%s",sinput);
}
}
运行结果如下:
