我要投稿 投诉建议

C++面试试题

时间:2022-09-25 18:25:56 面试试题 我要投稿
  • 相关推荐

C++面试试题

  1、给定字符串 A 和 B,输出 A 和 B 中的最大公共子串。

C++面试试题

  比如 A="aocdfe" B="pmcdfa" 则输出"cdf"

  */

  //Author: azhen

  #include

  #include

  #include

  char *commanstring(char shortstring[], char longstring[])

  {

  int i, j;

  char *substring=malloc(256);

  if(strstr(longstring, shortstring)!=NULL) //如果„„,那么返回 shortstring

  return shortstring;

  for(i=strlen(shortstring)-1;i>0; i--) //否则,开始循环计算

  {

  for(j=0; j<=strlen(shortstring)-i; j++){

  memcpy(substring, &shortstring[j], i);

  substring[i]='\0';

  if(strstr(longstring, substring)!=NULL)

  return substring;

  }

  }

  return NULL;

  }

  main()

  {

  char *str1=malloc(256);

  char *str2=malloc(256);

  char *comman=NULL;

  gets(str1);

  gets(str2);

  if(strlen(str1)>strlen(str2)) //将短的字符串放前面

  comman=commanstring(str2, str1);

  else

  comman=commanstring(str1, str2);

  printf("the longest comman string is: %s\n", comman);

  }

  2、写一个函数比较两个字符串 str1 和 str2 的大小,若相等返回 0,若 str1 大于str2 返回 1,若 str1 小于 str2 返回-1

  int strcmp ( const char * src,const char * dst)

  {

  int ret = 0 ;

  while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)

  {

  ++src;

  ++dst;

  }

  if ( ret < 0 )

  ret = -1 ;

  else if ( ret > 0 )

  ret = 1 ;

  return( ret );

  }

  3、求 1000!的未尾有几个 0(用素数相乘的方法来做,如 72=2*2*2*3*3);

  求出 1->1000 里,能被 5 整除的数的个数 n1,能被 25 整除的数的个数 n2,能被 125 整除的数的个数 n3,

  能被 625 整除的数的个数 n4.

  1000!末尾的零的个数=n1+n2+n3+n4;

  #include

  #define NUM 1000

  int find5(int num){

  int ret=0;

  while(num%5==0){

  num/=5;

  ret++;

  }

  return ret;

  }

  int main(){

  int result=0;

  int i;

  for(i=5;i<=NUM;i+=5)

  {

  result+=find5(i);

  }

  printf(" the total zero number is %d\n",result);

  return 0;

  }

  4、有双向循环链表结点定义为:

  struct node

  { int data;

  struct node *front,*next;

  };

  有两个双向循环链表 A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中 data值相同的结点删除

  BOOL DeteleNode(Node *pHeader, DataType Value)

  {

  if (pHeader == NULL) return;

  BOOL bRet = FALSE;

  Node *pNode = pHead;

  while (pNode != NULL)

  {

  if (pNode->data == Value)

  {

  if (pNode->front == NULL)

  {

  pHeader = pNode->next;

  pHeader->front = NULL;

  }

  else

  {

  if (pNode->next != NULL)

  {

  pNode->next->front = pNode->front;

  }

  pNode->front->next = pNode->next;

  }

  Node *pNextNode = pNode->next;

  delete pNode;

  pNode = pNextNode;

  bRet = TRUE;

  //不要 break 或 return, 删除所有

  }

  else

  {

  pNode = pNode->next;

  }

  }

  return bRet;

  }

  void DE(Node *pHeadA, Node *pHeadB)

  {

  if (pHeadA == NULL || pHeadB == NULL)

  {

  return;

  }

  Node *pNode = pHeadA;

  while (pNode != NULL)

  {

  if (DeteleNode(pHeadB, pNode->data))

  {

  if (pNode->front == NULL)

  {

  pHeadA = pNode->next;

  pHeadA->front = NULL;

  }

  else

  {

  pNode->front->next = pNode->next;

  if (pNode->next != NULL)

  {

  pNode->next->front = pNode->front;

  }

  }

  Node *pNextNode = pNode->next;

  delete pNode;

  pNode = pNextNode;

  }

  else

  {

  pNode = pNode->next;

  }

  }

http://www.cnrencai.com/