劍指Offer:面試題01---賦值運算子函式
題目: 如下為型別CMyString的宣告,請為該型別新增賦值運算子函式。
class CMyString
{
public:
CMyString(char *pData=NULL);
CMyString(const CMyString& str);
~CMyString(void);
private:
char *m_pData;
};
本題考點:1. 考查對C++的基礎語法的理解,如運算子函式、常量引用等;
2. 考查對記憶體洩漏的理解;
3. 對高階C++程式設計師,面試官還將考查應聘者對程式碼異常安全性的理解。
測試用例:
1. 把一個CMyString的例項賦值給另外一個例項;
2.把一個CMyString的例項賦值給自身;
3.連續賦值。
// AssignmentOperator.cpp : Defines the entry point for the console application. // // 《劍指Offer——名企面試官精講典型程式設計題》程式碼 // 著作權所有者:何海濤 #include <iostream> #include <string> using namespace std; class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print(); private: char* m_pData; }; CMyString::CMyString(char *pData) { if(pData == NULL) { m_pData = new char[1]; m_pData[0] = '\0'; } else { int length = strlen(pData); m_pData = new char[length + 1]; strcpy(m_pData, pData); } } CMyString::CMyString(const CMyString &str) { int length = strlen(str.m_pData); m_pData = new char[length + 1]; strcpy(m_pData, str.m_pData); } CMyString::~CMyString() { delete[] m_pData; } CMyString& CMyString::operator = (const CMyString& str) { if(this == &str) return *this; delete []m_pData; m_pData = NULL; m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData, str.m_pData); return *this; } // ====================測試程式碼==================== void CMyString::Print() { printf("%s", m_pData); } void Test1() { printf("Test1 begins:\n"); char* text = "Hello world"; CMyString str1(text); CMyString str2; str2 = str1; printf("The expected result is: %s.\n", text); printf("The actual result is: "); str2.Print(); printf(".\n"); } // 賦值給自己 void Test2() { printf("Test2 begins:\n"); char* text = "Hello world"; CMyString str1(text); str1 = str1; printf("The expected result is: %s.\n", text); printf("The actual result is: "); str1.Print(); printf(".\n"); } // 連續賦值 void Test3() { printf("Test3 begins:\n"); char* text = "Hello world"; CMyString str1(text); CMyString str2, str3; str3 = str2 = str1; printf("The expected result is: %s.\n", text); printf("The actual result is: "); str2.Print(); printf(".\n"); printf("The expected result is: %s.\n", text); printf("The actual result is: "); str3.Print(); printf(".\n"); } int main() { Test1(); Test2(); Test3(); return 0; }
相關推薦
劍指Offer:面試題01---賦值運算子函式
題目: 如下為型別CMyString的宣告,請為該型別新增賦值運算子函式。 class CMyString { public: CMyString(char *pData=NULL); CMyString(const CMyString& str
劍指offer:面試題2
面試題2:實現Singleton模式 編譯器:python3.5.2 程式設計環境:pycharm2018.1.2x64 方法一、__new__方法來實現單例模式 用__new__方法實現的單例模式,比如下面的MyClass類,會對類的初始化有影響嗎?會對類的例項方法
劍指offer:面試題4
面試題4:如果直接每次遇到空格新增’%20’,那麼空格後面的數字就需要頻繁向後移動。遇到這種移動問題,我們可以嘗試先給出最終需要的長度,然後從後向前掃描,同時給定兩個指標來保證定位。逆向思維 編譯器:python3.5.2 程式設計環境:pycharm2018.1.2x6
劍指offer:面試題16
面試題16:反轉連結串列:需要注意三個問題:1、輸入的連結串列頭指標為None;2、整個連結串列只有一個結點時 ;3、反轉後的連結串列出現斷裂,返回的翻轉之後的頭節點不是原始連結串列的尾結點。因此需要引入一個翻轉後的頭結點,以及一個指向當前結點的指標,一個指向當前結點前一個結
劍指offer:面試題57
面試題57:刪除連結串列中重複的結點:我們需要設定一個指標preNode,preNode最開始為None,然後設定兩個指標,pNode指向當前節點,pNext指向pNode下一個結點: 如果pNext不為空而且pNext的值等於pNode的值,那麼就說明出現了重複數字的結點
劍指offer:面試題二:單例模式的實現(使用C++語言)
#include <iostream> #include <iomanip> #include <cstdio> #include <cstdlib>
《劍指Offer》面試題1:賦值運算子函式
// 面試題1:賦值運算子函式 // 題目:如下為型別CMyString的宣告,請為該型別新增賦值運算子函式。 class CMyString { public: CMyString(char* pData = nullptr);
《劍指offer》面試題10:斐波那契數列
題目一:求斐波那契數列的第n項 寫一個函式,輸入n,求斐波那契(Fibonacci)數列的第n項。斐波那契數列的定義如下: 當n=0時,f(n)=0; 當n=1時,f(n)=1; 當n>1時,f(n)=f(n-1)+f(n-2); 從下往上計算,首先根據 f(0)和 f(
《劍指offer》面試題32:從上到下列印二叉樹
題目一:不分行從上到下列印二叉樹 從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。 二叉樹節點的定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNo
《劍指offer》面試題9:用兩個棧實現佇列
題目:用兩個棧實現一個佇列。佇列的宣告如下,請實現它的兩個函式appendTail 和deleteHead ,分別完成在佇列尾部插入節點和在佇列頭部刪除節點的功能。 template <typename T> class CQueue { public: CQueue(vo
《劍指offer》面試題8:二叉樹的下一個節點
題目:給定一顆二叉樹和其中的一個節點,如何找出中序遍歷序列的下一個節點?樹中的節點除了有兩個分別指向左、右子節點的指標,還有一個指向父節點的指標。 二叉樹的節點定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode*
《劍指offer》面試題7:重建二叉樹
題目:輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。 二叉樹節點的定義如下: struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; Binar
Java《劍指Offer》面試題2:替換空格
替換空格 題目描述:請實現一個函式,將一個字串中的每個空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。 思路:建立StringBuffer物件,然後將StringBuffer物件轉成字串物件,接著呼叫字串物件的replace方法,將空格
《劍指Offer》面試題:找出陣列中有3個出現一次的數字
題目 一個int陣列中有三個數字a、b、c只出現一次,其他數字都出現了兩次。請找出三個只出現一次的數字。 思路 由於3個數字出現一次,其他數字均出現兩次,因此可以得到n一定為奇數。 3個只出現一次的數字,他們的bit位肯定不可能全部相同,也就是說
【劍指offer】面試題2:實現 Singleton 模式
本文目錄: 懶漢式和餓漢式 解法1:只適用於單執行緒環境 (不好) 解法2:雖然在多執行緒環境中能工作,但是效率不高 (不好) 解法3:加同步鎖前後兩次判斷例項是否存在 (可行) 解法4:利用類靜態變數初始化一個例項 (推薦使用) 解法5:靜態內部類實
劍指Offer系列-面試題39-2:判斷一棵樹是否為平衡二叉樹
題目:判斷一棵樹是否為平衡二叉樹 思路:根據上一題的二叉樹的深度,在遞迴過程中加上識別符號,遞迴到當前節點,判斷當前子樹是不是一個平衡二叉樹,如果不是,就把識別符號置為false,返回識別符號即可。
【劍指offer】面試題14:剪繩子
題目:給你一根長度為 n 繩子,請把繩子剪成m段(m、n都是整數,n>1並且m≥1)。每段的繩子的長度記為k[0]、k[1]、…… 、k[m]。請問 k[0] * k[1] * … * k[m]可能的最大乘積是多少?例如當繩子的長度是8時,我們把它剪成長度分別為2、3、3的三段,此時得
【劍指offer】面試題57(1):和為S的數字
題目 輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。 ps: 對應每個測試案例,輸出兩個數,小的先輸出。 思路
【劍指Offer】面試題8:旋轉陣列的最小數字
一:題目描述 把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大
【劍指offer】面試題21:調整陣列順序使奇數位於偶數前面
題目1:輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有奇數位於陣列的前半部分,所有偶數位於陣列的後半部分。 如果不考慮時間複雜度,最簡單的思路應該是從頭掃描這個陣列,每碰到一個偶數時,拿出這個數字,並把位於這個數字後面的所有的數字往前面挪動一位。挪完之後在陣列的末