现在的位置: 首页 > 综合 > 正文

面试题目(1)——删除与某个字符相邻且相同的字符

2012年04月24日 ⁄ 综合 ⁄ 共 2760字 ⁄ 字号 评论关闭

题目要求:

删除与某个字符相邻且相同的字符,如,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);
    }

}

 

运行结果如下:

抱歉!评论已关闭.