几种常见C语言面试问题分析

有一次去一家小公司面试,没怎么注意。当时工作很忙,没准备。他们在试卷上给了我很多问题,必须在一个小时内完成。当我看到问题的数量时,我震惊了。有链表、多维数组和大量的程序阅读。好在基本功扎实,不辱使命,完成的很差。做编程题的时候,发现自己太久没写程序了,浪费了太多精力在一些琐碎的BUG修复工作和代码维护上。我一直在做,我也暗暗吃惊。一个小时,如果这个问题刚毕业,还是有可能完成的。工作几年,压力越来越小,基本都是走编程,对标准库函数的原理把握和编程能力越来越差。因为当时时间紧迫,写出来的程序还不够完善,所以后来想了想,回国后很快就总结了这些问题。下面分析一下面试中遇到的编程问题。诚然,人在社会如江湖,学习一刻也不能放松。一不小心,晚上的节日什么都不会说,反而会在阴沟里翻船。

1.获取路径下的文件名

char * FindFileName

{

int len

char * tmp = NULL

断言(s!= NULL);

for(len = strlen(s);len & gt0;len -)

{

if((s[len]=='/') ||(s[len]=='//'))

{

tmp = & amps[len+1];

打破;

}

}

返回tmp

}

2.将整数转换成字符。

char * i2a(int n,char *s)

{

int i,sign

断言(s!= NULL);

if((sign = n)& lt;0)

{

n =-n;//转换成正数,有利于位置选择。

}

{

s[i++]= n % 10+' 0 ';

}

while ((n /= 10)>0)

if(sign & lt;0)

{

s[i++]= '-';

}

s[I]= '/0 ';

反转;

}

3.将字符转换为整数。

int a2i(char * s)

{

int i,n,sign

断言(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]& gt;= ' 0 ' & amp& amps[I]& lt;= '9';i++)

{

n = 10 * n+(s[I]-' 0 ');

}

回车符* n;

}

4.输出字符串是反转的,内存不能动态分配。

字符*反转(字符*秒)

{

int c,I,j;

断言(s!= NULL);

for (i = 0,j = strlen(s)-1;我& ltj;i++,j -)

{

c = s[I];

s[I]= s[j];

s[j]= c;

}

返回s;

}

5.查找子字符串是否存在。

int strindex(char *str,char *searchstr)

{

int end,I,j;

断言((str!= NULL)& amp;& amp(searchstr!= NULL));

//计算结束位置

end = strlen(str)-strlen(search str);

if(end & gt;0 )

{

for(I = 0;我& lt=结束;i++)

{

for(j = I;str[j]= = search str[j-I];j++)

{

if(search str[j-I+1]= '/0 ')/*子串单词结尾*/

{

返回I+1;/*找到子串*/

}

}

}

}

return-1;

}