几个面试题,请各抒已见

gongzihuahua 2004-10-25 03:04:32
1.在C++中,extern \\\\\\\"C\\\\\\\"语句经常被看到,请问这是干什么用的?
2.#define MAX(X,Y) X > Y ? X : Y 有什么问题?请修改!
3.为什么编译器对语义上的错误很难判断出来,从这一点你觉得在软件开发过程应当意什么?
4.时间复杂度和空间复杂度在现行阶段的程序实现中,你会编重于什么,为什么?
5.程序的可读性,可维护性是很重要的,现请你为公司起草一份增强程序可维护性、可读性的程序编制的注意事项。
6.在C++程序编译过程中,C++编译器主要工作有哪些?各起什么作用?
7.半小时内完成trim函数,其功能是除去字符串尾部的空格,要修改源字符串。

尤其是第1题和第6题,不太明白
...全文
452 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuantao 2004-11-04
  • 打赏
  • 举报
回复
再顶, 大家都来看看.
yuantao 2004-11-04
  • 打赏
  • 举报
回复
倒, 典型的骗分行为啊, 请斑竹关注一下.
huyansoft 2004-10-27
  • 打赏
  • 举报
回复
好题
camelyi 2004-10-26
  • 打赏
  • 举报
回复
我仔细看了看我原来写的源码
char *trim(char *szSrc)
{
char *pCh = szSrc;
int iSpaceCount = 0;

while (true)
{
while (*pCh == ' ')
{
pCh++;
iSpaceCount++;
}

if (*pCh == '\0')
{
*(pCh - iSpaceCount) = '\0';
break;
}
else
{
iSpaceCount = 0;
pCh++;
}
}

return szSrc;
}
虽然它只是对字符串从头到尾遍历了一次,但是访问每个字符的时候它都要对iSpaceCount进行操作(这个似乎在多数时间比较多余),然后再将指针后移,我希望能够把对iSpaceCount的操作优化一下,更新我的源码为:
char *trim(char *szSrc)
{
char *pCh = szSrc;
char *pNewEnd;

while (true)
{
pNewEnd = pCh;
while (*pCh == ' ')
{
pCh++;
}

if (*pCh == '\0')
{
*pNewEnd = '\0';
break;
}
else
{
while ((*pCh != ' ') && (*pCh != '\0'))
{
pCh++;
}
}
}

return szSrc;
}

请大家斧正!
camelyi 2004-10-25
  • 打赏
  • 举报
回复
回复人: liudaqin(liudaqin) ( ) 信誉:100
回复人: kongyunzhongque(云雀) ( ) 信誉:118

呵呵,看看你们的代码,strlen函数本身就需要花线性时间来检索确定字符串长度,然后你们再逆序截断字符串,效率稍低了点。
Win32Boy 2004-10-25
  • 打赏
  • 举报
回复
惭愧,还有很多东西要学啊。
kongyunzhongque 2004-10-25
  • 打赏
  • 举报
回复
7.
char *rtrim(char *str)
{
int n =strlen(str)-1;
while(n>0)
{
if(*(str+n) !=' ')
{
*(str+n+1) ='\0';
break;
}
else
n--;
}
return str;
}
liudaqin 2004-10-25
  • 打赏
  • 举报
回复
更正 if( szSrc[len]==' ')
改为 if( szSrc[len]!=' ')
asd123yx 2004-10-25
  • 打赏
  • 举报
回复
这种问题
我还是感觉到模糊
看到大家做的这么爽心理惭愧了
liudaqin 2004-10-25
  • 打赏
  • 举报
回复
7.
char *trim(char *szSrc)
{
for( int len=str(szSrc); len>0; len--)
if( szSrc[len]==' ')
break;
szSrc[len+1]='\0';
return szSrc;
}
OverIsOver 2004-10-25
  • 打赏
  • 举报
回复
学习:)
------------------------------------
[人多力量大]有人来一起BT MSDN2004 Oct版吗?3429MB http://search3.btchina.net/btsearch.php?query=msdn&type=0 注:因为解压后是DVD的ISO,大于了4G,所以只能解压到ntfs分区。有朋友昨天下载后能正确安装的:)
LittleLee 2004-10-25
  • 打赏
  • 举报
回复
学习
xiaonian_3654 2004-10-25
  • 打赏
  • 举报
回复
什么公司的,看来不是小公司,很务实阿
powerbamboo 2004-10-25
  • 打赏
  • 举报
回复
2.#define MAX(X,Y) X > Y ? X : Y 有什么问题?请修改!
#define MAX(X,Y) (X) > (Y) ? (X) : (Y)

6.在C++程序编译过程中,C++编译器主要工作有哪些?各起什么作用?
(1)编译器首先要做预处理, 把宏展开
(2)编译源程序得到汇编语言称许
(3)由汇编语言生成目标文件
interceptor 2004-10-25
  • 打赏
  • 举报
回复
2 每个参数都要加括号
zjz800800 2004-10-25
  • 打赏
  • 举报
回复
这份题还蛮好,主要考的是程序的风格和基础
lvgame 2004-10-25
  • 打赏
  • 举报
回复
2、应该加个()吧:#define MAX(X,Y) (X > Y ? X : Y)
醉马不肖 2004-10-25
  • 打赏
  • 举报
回复
这是什么公司的,很基础,比那些问新技术的要塌实的多
camelyi 2004-10-25
  • 打赏
  • 举报
回复
楼上的,人家要求的是去掉尾部的空格,不是去掉所有空格!~

char *trim(char *szSrc)
{
char *pCh = szSrc;
int iSpaceCount = 0;

while (true)
{
while (*pCh == ' ')
{
pCh++;
iSpaceCount++;
}

if (*pCh == '\0')
{
*(pCh - iSpaceCount) = '\0';
break;
}
else
{
iSpaceCount = 0;
pCh++;
}
}

return szSrc;
}
yuantao 2004-10-25
  • 打赏
  • 举报
回复
3. 逻辑上的错误是很难发现的. 为了避免这种错误, 一方面要设计简单清晰的算法. 一方面要自己注意测试, 以避免这种问题.

4. 在现阶段,机器内存一般都很大, 程序可用的内存空间比较多, 应该尽可能采用以空间换时间的原则.

5.可以看林锐的高质量 c\c++ 程序指南

6. 编译器首先要做预处理, 去除宏, 然后要把原程序翻译成汇编语言, 再由汇编语言生成目标文件,
然后再将目标文件于资源文件进行连接, 生成可执行文件.

7.最后1个很好做, 做1次字符串的遍历, 发现当前字符是空格则将后一个字符前移,即可.
加载更多回复(2)

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧