以下题目使用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