几个常见的C语言面试题分析

来源:互联网 发布:myeclipse2017破解mac 编辑:程序博客网 时间:2024/05/02 16:58

一次去一个小公司面试,没有太重视,当时由于工作甚忙,也没作准备。他们给我的试卷有大量的题,规定一个小时必须做完,一看题量,吓了一大跳,题有链表,有多维数组,有大量的程序阅读,幸亏基本功还算扎实,未辱使命,差强完成。等到做到编程题时,才发现自己太长时间没有写过程序了,让一些琐碎的改BUG工作和代码维护浪费了太多的精力。一直做下去,心里暗暗吃惊,一个小时,这个题量如果是在刚毕业时,还是有可能完成的,工作几年后,压力渐小,写程序基本都是拿来主义,对标准库函数的原理把握和编程能力越来越退化。由于当时时间紧迫,所写程序也不够完善,过后又思考了一下,回到家后赶紧又对这些问题总结了一下。下面对面试中遇到的编程问题分析了一下。真是人在社会如江湖呀,学习是一刻也不能放松的事。稍一不慎,晚节不保不说,反而会阴沟里翻船。

1.获取路径下的文件名

char * FindFileName(char * s)
{
 int len;
 char *tmp=NULL;

 ASSERT(s != NULL);
 for (len=strlen(s); len>0;len--)
 {
  if((s[len]=='/') ||(s[len]=='//'))
  {
   tmp = &s[len+1];
   break;
  }
 }
 return tmp;

}

2.把整型转化为字符型
char * i2a(int n, char *s)
{
 int i, sign;

 ASSERT(s != NULL);
 if ((sign = n) < 0)
 {
  n = -n;  //转为正数,利于取位
 }
 
 do
 {
  s[i++] = n % 10 + '0';
 }
 while ((n /= 10) > 0)
 if (sign < 0)
 {
  s[i++]  = '-';
 }
 s[i] = '/0';

 reverse(s);
}

3.把字符型转为整型

int a2i(char * s)
{
 int i, n, sign;

 ASSERT(s != NULL);
 for (i = 0; s[i] == ' '; i++)
 {
  NULL;  //如果字串前有空格,跳过所有空格
 }
 sign = (s[i] == '-') ?: -1 : 1;
 if (s[i] == '+' || s[i] == '-')
 {
  i++;      //判断是正整数串还是负整数串
 }
 for (n = 0; s[i] > = '0' && s[i] <= '9'; i++)
 {
  n = 10 * n + (s[i] - '0');
 }
 return sign*n;
}

4.输出字符串倒文,不能动态分配内存

char * reverse(char * s)
{
 int c, i, j;

 ASSERT(s != NULL);
 for (i = 0, j = strlen(s) - 1; i < j; i++, j--)
 {
  c = s[i];
  s[i] = s[j];
  s[j] = c;
 }

 return s;
}

5.查找子串是否存在

int strindex(char *str,char *searchstr)
{
 int end, i, j;

ASSERT((str != NULL) && (searchstr != NULL)); 
//计算结束位置
 end = strlen(str) - strlen(searchstr); 
 if ( end > 0 )                    
 {
  for ( i = 0; i <= end; i++ )
  {
   for ( j = i; str[j] == searchstr[j-i]; j++ )
   {
    if ( searchstr[j-i+1] == '/0' ) /* 子字符串字结束   */
    {
     return i + 1;           /* 找到了子字符串   */
    }
   }
  }
 }
 return -1;
}

原创粉丝点击