首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

找c/c++程序员工作时遇到的笔试题有关问题

2012-03-24 
找c/c++程序员工作时遇到的笔试题问题小弟于前几日去一家公司面试程序员的工作,要求先做笔试题,当时出了四

找c/c++程序员工作时遇到的笔试题问题
小弟于前几日去一家公司面试程序员的工作,要求先做笔试题,当时出了四道程序题。小弟只做出二题。另二题并未做出,请大家赐教,如下:

1.设有一字符串s= "edf\ttjk\t\tkjf\tlf ",要求处理(\t替换4个)后s= "edf****tjk********kjf****lf "

2.请将整型数据a在内存中的第1个字节的内容与第4个字节的内容交换,将第2个字节的内容与第4个字节的内容交换。


====================说明:
请尽量考虑用最简便方法完成(同时注意程序的健壮性)。


[解决办法]
第二个有个简单的:
int a=0x31323334;
__asm mov eax,a
__asm bswap eax
__asm mov a,eax
printf( "%s ",&a);//这句只是实验而已,会多出来些乱码
[解决办法]
1.想不出简单的解决方案,是我的话当时就会用字符串替换

2.最终岂不是第一个字节的和第二个字节的内容互换?

void swap(int *a)
{
char * p=(char *)a;
*((char *)a)=*((char *)a+1);
*((char *)a+1)=*p;
}

[解决办法]
1、char temp[200];
for(char* p=s;*p!= '/0 ';p++)
{
if(*p== '/t ')
{
strcmp(temp,p+1);
strcmp(p, "**** ");
strcmp(p+4,temp);
p=p+3;
}
}

2、共用体
{
int i;
char byte[4];
}
[解决办法]
1.
char * t = new char[4*strlen(s)+1];
char * q = t;
do
{
if( *s == '\t ' )
{
strcpy(q, "**** ");
q+=4;
}else
{
*q++=*s++;
}
}
while( *s!=NULL );
return t;
2. int x=....
char *p = (char*)&x;
char t;
std::swap(p[0],p[3]);
std::swap(p[1],p[2]);
[解决办法]
1.如果是我的话,就扫描2边解决,从前到后,在从后到前。
楼上的方法感觉空间上有点牺牲呵呵。
2. 没办法,就用char *交换吧,不会用汇编:)
[解决办法]
1.设有一字符串s= "edf\ttjk\t\tkjf\tlf ",要求处理(\t替换4个)后s= "edf****tjk********kjf****lf "
---------------------------------
#include <stdio.h>

int main(void)
{
char s[50]= "edf\ttjk\t\tkjf\tlf ";
char buf[50];

sscanf ( "edf****tjk********kjf****lf ", "%s ", s);
puts (s);

return 0;
}


[解决办法]
楼上的做法好像等于没做
就像
char s[50] = " "edf\ttjk\t\tkjf\tlf ";;
strcpy(s, "edf****tjk********kjf****lf ");
呵呵
[解决办法]
up
[解决办法]
2
int a = ...;
int h = ( a& 0x00ff) < <8;
int l =( b & 0xff00)> > 8;
a = h|l;

[解决办法]
这一题当时笔试完后,我看到有一人只用了五步就完成了,我发现他只定义了四个变量分别获取变量a在内存中的各字节。采用的是逻辑运算,但具体是怎么做的没有看清!!!这也算是给大家的一个提示吧。。。。

----------------------------------------

如果我刚毕业去做这些题,就会用位操作去做,但是我现在选择使用共用体的方式:union,因为方便。
extern int a;
int h4 = (0x1000&a)> > 24;
int l1 = (0x0001&a) < <24;
a &= 0x0110;
a = a|h4|l1;
使用共用体和用汇编都更方便易懂。
第一题,看起来很简单,不过考察新手很有用,有许多需要注意的地方,可以考察到对内存,编译的理解。查找替换算法倒很简单。
------解决方案--------------------


第一题目
char* s= "edf\ttjk\t\tkjf\tlf ";
sscanf(s, "%[^\t]\t%[^\t]\t%[^\t]\t%[^\t] ",buff[0],buff[1],buff[2],buf[3]);

热点排行