2011年的百度公司的笔试题记录

1)题目见下。自己在做时遇到错误的地方

(1)for循环的判断条件老是出错,

for(;tmp_str[i+1]==tmp_str; ++i)其实相当于

while(tmp_str[i+1]==tmp_str)

  {      ++i ;     }

意思应该是在tmp_str[i+1]==tmp_str时才会执行,当不相等时才会退出这个循环,而我竟然相反了,不知道含义就瞎做。记得前段时间参加康佳公司的笔试也是犯了这个错误。当成不等了。

(2)tmp_str!=0其实就是判断tmp_str所指向的字符是不是‘\0’,‘\0’字符的ascII码即为0,字符直接和整型比较时注意这个转化,而我竟错误的认为这句话运行时会出错。


2. 阅读下面代码,说明输出的含义并挑错
问题1:写出下列代码的运行结果的前7行,并说明程序的含义
问题2:代码中是否有不安全隐患?原因是?
#include  
#include  
 
const int MAX_LEN = 128;
const int MAX_LINE = 20;
int main(int argc, char* argv[])
{
  char str[MAX_LEN] = "1";
  char tmp_str[MAX_LEN] = "";
  char buf[MAX_LEN] = "";
  printf("%s/n",str);
  for (int line = 1; line {
  strcpy(tmp_str,str);
  str[0] = '/0';
  for (int i=0;tmp_str!=0; ++i)
  {
  char ch = tmp_str;
  int count = 1;
  for (;tmp_str[i+1]==tmp_str; ++i)
  {
  ++count;
  }
  sprintf(buf,"%d%c",count,ch);
  strcat(str,buf);
  }
  printf("%s/n",str);
  }
  return 0;
}

答案是统计出一个字符串中相同字符的个数并打印出来。因为自己对c语言的strcat(str,buf); sprintf(buf,"%d%c",count,ch); 不是太熟,再加上上面提到的几个错误,导致没有得出结果,在同学和网络的帮助下,得出答案。


2)

vector的clear(begin(),end())的意思是是清楚所有元素,仅仅是移动指针,并不释放内存,

如果是new的,即放在堆里的,可以通过free来释放,如果是放在栈里面,则没法手动释放吧。

此博客是今年参加百度校招的笔试题,参加一下博客地址

http://shijuanfeng.blogbus.com/logs/167081236.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值