某公司面试中的笔试题

以下题目使用C或者C++编程实现,不得使用全局变量。

 

1.实现以下字符串替换函数,将字符串base中所有子串oldVal替换为新的子串 newVal(假定oldVal 与newVal长度相同)

 

void replace (char * base, const char * oldVal, const char* newVal);

 

2. 将一个N进制数转换为M进制数(N<10, M<10, N!=M).

 

char* ntom(int n, const char* a, int m);

例如 8进制数 “127” 转为2进制数;

 

char* b = ntom(8, "127", 2"); // b = "1010111"

(不允许使用atoi,strtod等库函数);

 

3. 实现一个每隔两个节点反转链表的函数,例如原链表

 

node1->node2->node3->node4->node5 

 

反转后为 node2->node1->node4->node3->node5 要求时间复杂度O(n), 空间复杂度O(1).

 

typedef struct Node{

struct Node * next;

} Node;

 

Node* reverse2(Node* first);

 

4. 要求实现一个智能指针,使得以下程序可以运行。注意指针不能多次释放。

 

struct Obj {

void fun(){printf ("Obj::fun/n");}

~Obj() {printf ("destroy Obj/n");}

};

 

template<class T> struct autoptr

{

//Your codes here

};

 

int main()

{

autoptr<Obj>p1(new Obj);

autoptr<Obj>p2 = p1;

p1->fun();

p2->fun();

printf("END of main()/n");

return 0;//Obj can be auto freed by autoptr;

}

 

运行结果:

 

Obj::fun

Obj::fun

END of main()

destroy Obj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值