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

晨曦之光 发布于 2012/03/09 14:13
阅读 447
收藏 0

题目要求:

删除与某个字符相邻且相同的字符,如,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=,j=;
    
int len=strlen(str);
    
for(j=i+1;j<len;j++)
    
...{
        
if(str[i]!=str[j])
            str[
++i]=str[j];
    }

    str[i
+1]=;

    
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)=;
    
    
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)=;

    
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")!=)
    
...{
        
if(stricmp(sinput,"a")== || stricmp(sinput,"b")== || stricmp(sinput,"c")==)
        
...{
            printf(
"  please input an string:");
            scanf(
"%s",&str);
            printf(
"   before deletion: %s",str);

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

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


        
//输入命令
        printf("$ input command >");
        scanf(
"%s",sinput);
    }

}

 

运行结果如下:


原文链接:http://blog.csdn.net/livelylittlefish/article/details/2132675
加载中
返回顶部
顶部