分享

华为笔试过了,面试时又出了一道题 C/C / C语言

 skywood 2006-10-13



  我这样做的:先定义一个字符数组,遍历字符串将字符与数组中的字符比较,数组中没有时则将该字符放入其中,另定义一个整数数组,其对应位置放入该字符的个数;如果字符数组中存在该字符则直接在整数数组的对应位置加1。遍历完字符串时,其包含的字符和字符个数分别放到了两个数组中,到面试人却说该算法过于复杂,请各位给予指点。(以前上学时遇到过,具体如何做的忘了)
问题点数:40、回复次数:43
17楼  sd01101230   (一只蚂蚁) 一级用户 该版得分小于等于100分  回复于 2005-03-21 15:40:57  得分 5

#include   "stdafx.h"  
   
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
        char   *   key   =   "class3";  
  char   *base[6]   =   {"class1","class3","class3","class2","class3","class3"};  
  unsigned   int   n   =   sizeof(base)/sizeof(base[0]),i=0;  
  char   **result1;  
  int   index[6]={0};  
   
  //preview   data;  
  printf(   "base   before   _lsearch:\n"   );  
  for(   i=0;   i<n;   ++i   )   printf(   "[   %s   ]",   base[i]   );  
  printf(   "\n\n"   );  
   
  //search   char  
  result1   =   (char   **)search(   &key,   base,&n,sizeof(base[0]),index,   compare   );  
   
  printf(   "\n"   );  
  //printf(   "   %d   \n",sizeof(int)   );  
  //print   index   &   string   +=sizeof(char*)  
  if   (n   !=   sizeof(base)/sizeof(base[0])   +10)  
  {  
  printf(   "string     index\n");  
  for(   i=0;   i<n;i   ++)  
  printf   ("%s       %d   \n",(char   **)result1[i],index[i]   );  
  }  
   
  getchar();  
  return   0;  
  }  
   
  int   compare(const   void   *   arg1,const   void   *   arg2)  
  {  
  return   (strcmp(*(char   **)arg1,*(char   **)arg2));  
  }  
  void   *   search(const   void   *   key,  
  void   *   base,  
  unsigned   int   *   num,  
  unsigned   int   width,  
  void   *   index,  
  int   (_cdecl   *compare)(const   void   *,const   void   *))  
  {  
  const   char   *pbase,*pelement;  
  const   char   *pback,*psearch;  
  int   counter   =   -1,i   =   0;  
  const   int   *indexback;  
  //DATA   ssearch[6];  
  //base   total   adrress  
  try  
  {  
  pbase   =   (const   char*)   base   +   *num   *   width;  
  //save   pre.Address  
  pback   =psearch=pbase   +   *num   *   width;  
   
  indexback   =   (const   int   *)index;//=(int   *)pback   +   *num   *   sizeof(int   *);  
   
  //psearch   -=width;  
  for   (   pelement   =   (const   char   *)base;   pelement   <   pbase;   pelement   +=width,i++)  
  {  
  if   (!compare(key,(void   *)pelement))  
  {  
  //index   =   &counter;  
  counter   ++;  
  memcpy((void   *)psearch,(void   *)pelement,width);  
  memcpy((void   *)indexback,(void   *)(&i),sizeof(int   *));  
  indexback   ++   ;  
  psearch   +=width;  
  //ssearch[counter].pdata   =   (char   *)pback+width*counter;  
  //ssearch[counter].index   =   i;  
  }  
  }  
  if   (counter   !=-1)  
  {  
  //index   =   indexback;  
  *num   =   ++counter;  
  return   ((void   *)   pback);  
  }  
  else  
  return   (base);  
  }  
  catch   (char   *str)  
  {  
  MessageBox(NULL,     str     ,"",MB_OK);  
  }  
  //return   0;  
  }
25楼  yangvxin1   (小杨) 一级用户 该版得分小于等于100分  回复于 2005-03-21 16:57:49  得分 0

int   Char_Num[128];  
  void   InitialArray()  
  {  
  for(int   i=0;i<128;i++)  
                    Char_Num[i]=0;  
  }  
  void   LoopArray(const   char   *p)  
  {  
  char   pp;  
    for(int   i=0;i<strlen(p);i++)  
  {  
                        pp=*(p+i);  
      Char_Num[pp]++;  
  }  
  }  
  void   print()  
  {      
  int   p;  
  for(int   i=0;i<128;i++)  
  {  
        p=Char_Num[i];  
        if(p!=0)  
        {  
                    printf("The   number   of   %c   is   %d",i,p);  
            printf("\n");  
        }  
  }  
  }  
  void   main(void)  
  {  
          InitialArray();  
  LoopArray("aaabbbcccdddeee;;>/??MM^&%*$#@SDVGfffgggaaaiiiiiiiiitryryasfa");  
  print();  
  }  
  哈哈。无聊。觉得。  
 
34楼  qifa   () 二级用户 该版得分小于等于500分,大于100分  回复于 2005-03-21 21:35:53  得分 0

Iamanders(日上三竿)    
  先排序,然后计数,  
   
  耗时比较长,唯一的就是思路清晰  
   
  这样行不行啊--》  
  ///////////////////////////////////////////////////////  
   
  #include   <iostream.h>  
  #include   <string.h>  
   
  const   BUFFER   =   256;  
  #define   SWAP(a,b)   a^=b^=a^=b;  
  void   main()  
  {  
  char   buf[BUFFER];  
   
  cout<<"请输入字符串[不超过256]:";  
  cin>>buf;  
   
  int   Length,i,j;  
   
  Length   =   strlen(buf);  
  cout<<"总字符:"<<Length<<endl;  
  //排序  
  for(i=0;   i<Length;   i++)  
  for(j=i;   j<Length;   j++)  
  if   (buf[i]   >   buf[j])   SWAP(buf[i],buf[j]);  
  cout<<endl<<buf<<endl<<endl;  
  //统计输出  
  j=1;  
  for(i=0;   i<Length;   i++)  
  {  
  if   (buf[i]   !=   buf[i+1])  
  {  
  cout<<"字符:   \‘"<<buf[i]<<"\‘   出现"<<j<<"次"<<endl;  
  j   =   1;  
  }  
  else  
  {  
  j++;  
  }  
  }  
   
  }  
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多