C++笔试题经典的两个

//实现一个自己版本的string。
#include <iostream>
#include <string.h>
using namespace std;

class String
{
public:
    String(const char *s = "")
    {
        str = new char[strlen(s) + 1];
        copy(str,s);
    }
    ~String()
    {
        if (str != NULL)
        {
            delete[]str;
            str = NULL;
        }
    }
    String(const String &s)
    {
        str = new char[strlen(s.str) + 1];
        copy(str,s.str);
    }
    String& operator=(const String &s)
    {
        String sp(s.str);
        if (this != &s)
        {
            char *temp = str;
            str = sp.str;
            sp.str = temp;
        }
        return *this;
    }
    void Printf()
    {
        cout << str << endl;
    }
    friend  istream& operator>>(istream &is,String& s)
    {
        char *str = new char[30];
        is >> str;
        String temp(str);
        s = temp;
        return is;
    }
    friend ostream& operator << (ostream &out, String& s)
    {
        out << s.str;
        return out;
    }
private:
    void copy(char *dist,const char *src)
    {
        strcpy(dist,src);
    }
private:
    char *str;
};
int main()
{
    String s;
    cin >> s;
    cout << s<<endl;
    return 0;
}

#include <iostream>
using namespace std;
//实现一个简单的智能指针。
template<typename Type>
class my_auto
{
public:
    my_auto(Type *p) :ptr(p)
    {
        count = new int[1];
        count[0] = 1;
    }
    my_auto(const my_auto<Type>& ma)
    {
        ptr = ma.ptr;
        count = ma.count;
        count[0]++;
    }
    my_auto& operator=(const my_auto &ma)
    {
        if (this != &ma)
        {
            this->~my_auto();
            ptr = ma.ptr;
            count = ma.count;
            count[0]++;
        }
        return *this;
    }
    ~my_auto()
    {
        if (count[0]-- == 1)
        {
            cout << "free" << endl;
            delete ptr;
            ptr = NULL;
            delete[]count;
            count = NULL;
        }
    }
    Type& operator*()
    {
        return *ptr;
    }
    Type* operator->()
    {
        return ptr;
    }
private:
    Type *ptr;
    int *count;
};
int main()
{
    my_auto<int> sp(new int(3));
    my_auto<int> sb(sp);
    my_auto<int> sa(new int(100));
    sa = sb;
    //cout << *sp << endl;
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-06 09:27:16

C++笔试题经典的两个的相关文章

C语言笔试题精选1---求两个数之间较大的数,不使用if、while、switch、for、?:/以及任何比较语句

题目:求两个数a.b之间较大的数,不使用if.while.switch.for.?:/以及任何比较语句 #include <stdio.h> int min(int a, int b) { int d = a - b; int flag = ((unsigned int)d) >> 31; int array[] = {b, a}; return array[flag]; } int main(int argc, char *argv[]) { int i_min, a, b; s

阿里笔试题:求两个子序列的最大连续子序列

原题例如以下: 给定一个query和一个text,均由小写字母组成.要求在text中找出以相同的顺序连续出如今query中的最长连续字母序列的长度.比如.query为 "acbac",text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此.返回结果应该为其长度3.请注意程序效率. 解题方法一: 和字符串匹配一样(http://blog.csdn.net/sinat_24520925/articl

笔试题:用两个栈实现队列

#include <iostream> #include <stack> using namespace std; template<typename T> class QUEUE { public: QUEUE(){} ~QUEUE(){} void APPEND(const T val) { while(st2.empty()==false) { //我们只用st2保存数据,st1作为中间交换桥梁. //首先将st2中的数据逆序保存在st1中. st1.push(s

笔试题:由两个栈构造min栈

#include <iostream> #include <stack> using namespace std; template<typename T> class Min { public: void PUSH(T val) { T temp = val; st1.push(val); if (st2.empty() == true) { st2.push(temp); st1.push(temp); } else { st2.pop(); while (st1.

去哪儿2015笔试题:寻找字符串的差异

去哪儿的一道笔试题. 给定两个字符串a,b:找出两个字符串中不一样的字符串.如存在于a而不存在于b,则将该字符输出,同时.加一个"-"标记:若存在于b而不存在于a,则输出该字符,同时以"+"标记.若是同时存在于a.b中,则不输出.假设字符串是由字母组成. 如: a="abc",b="aabcbc",则输出为"+a,+b,+c": a="abcde",b="bcdef"

经典笔试题:两个线程交替打印奇偶数

一.采用对象的wait() notify()方法实现 package com.gaopeng.programming; import java.util.concurrent.TimeUnit; /** * 经典笔试题:交替打印奇偶数 采用对象的wait() notify()方法实现 * * @author gaopeng * */ public class OddEvenThread { private static volatile Integer counter = 0; public s

【转】嵌入式软件工程师经典笔试题

嵌入式软件工程师经典笔试题 > 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中 有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3).

转:嵌入式软件工程师经典笔试题

> 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 我在这想看到几件事情: 1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等) 2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的. 3). 意识到这个表达式将使一个1

【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct { char dda; double dda1; int type ; }; MyStruct k; printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(