C语言面试题

2023-07-06   


1、编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。
   char * search(char *cpSource, char ch)
  
   char *cpTemp=NULL, *cpDest=NULL;
   int iTemp, iCount=0;
   while(*cpSource)
  
   if(*cpSource == ch)
  
   iTemp = 0;
   cpTemp = cpSource;
   while(*cpSource == ch)
   ++iTemp, ++cpSource;
   if(iTemp > iCount)
   iCount = iTemp, cpDest = cpTemp;
   if(!*cpSource)
   break;
  
   ++cpSource;
  
   return cpDest;
  
   2、请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
   int search(char *cpSource, int n, char ch)
  
   int i;
   for(i=0; i return i;
  
   一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
   将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。
  
   #include
   void foo(int m, int n)
  
   printf(“m=%d, n=%d ”, m, n);
  
   int main()
  
   int b = 3;
   foo(b+=3, ++b);
   printf(“b=%d ”, b);
   return 0;
  
   输出:m=7,n=4,b=7(VC6.0)
   这种方式和编译器中得函数调用关系相关即先后入栈顺序。不过不同
   编译器得处理不同。也是因为C标准中对这种方式说明为未定义,所以
   各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。
   因为这样,所以遇见这种函数,我们首先要考虑我们得编译器会如何处理
   这样得函数,其次看函数得调用方式,不同得调用方式,可能产生不同得
   结果。最后是看编译器优化。
  
   2.写一函数,实现删除字符串str1中含有的字符串str2.
   第二个就是利用一个KMP匹配算法找到str2然后删除(用链表实现的话,便捷于数组)
  
   /*雅虎笔试题(字符串操作)
   给定字符串A和B,输出A和B中的最大公共子串。
   比如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; jstrlen(str2)) //将短的字符串放前面
   comman=commanstring(str2, str1);
   else
   comman=commanstring(str1, str2);
   printf(“the longest comman string is: %s ”, comman);
  
  
   11.写一个函数比较两个字符串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


相关内容:

  1. C语言面试题
  2. C语言面试题
  3. SQL语言面试题
  4. c语言指针面试常见问题
  5. 阿尔卡特(中国)的面试题目