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