C 面試筆試題目(選2)(字串,原碼反碼補碼)

2021-07-07 02:17:33 字數 1992 閱讀 1708

已知strcpy函式的原型是

char *strcpy(char *strdest, const char *strsrc);

其中strdest是目的字串,strsrc是源字串。

char* strcpy(char* des,const char* source)

strcpy能把strsrc的內容複製到strdest,為什麼還要char * 型別的返回值?

答:為了實現鏈式表示式。

例如 int length = strlen( strcpy( strdest, 「hello world」) );

已知類string的原型為:

class string

; 請編寫string的上述4個函式。

標準答案:

// string的析構函式

string::~string(void)                // 3分
delete  m_data;
// 由於m_data是內部資料型別,也可以寫成 delete m_data;

}

// string的普通建構函式

string::string(const char *str) // 6分

if(str==null)                          

else

// 拷貝建構函式

string::string(const string &other)    // 3分

{

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 null 判斷則更好

strcpy(m_data, other.m_data);

// 賦值函式

string & string::operate =(const string &other)     // 13分

{

// (1) 檢查自賦值 // 4分

if(this == &other)

return *this;

// (2) 釋放原有的記憶體資源 // 3分

delete  m_data;

// (3)分配新的記憶體資源,並複製內容 // 3分

int length = strlen(other.m_data);

m_data = new char[length+1]; // 若能加 null 判斷則更好

strcpy(m_data, other.m_data);

// (4)返回本物件的引用 // 3分

return *this;

參考:

1、機器數

乙個數在計算機中的二進位制表示形式, 叫做這個數的機器數。機器數是帶符號的,在計算機用乙個數的最高位存放符號, 正數為0, 負數為1.

比如,十進位制中的數 +3 ,計算機字長為8位,轉換成二進位制就是00000011。如果是 -3 ,就是 10000011 。

那麼,這裡的 00000011 和 10000011 就是機器數。

2、真值

因為第一位是符號位,所以機器數的形式值就不等於真正的數值。例如上面的有符號數 10000011,其最高位1代表負,其真正數值是 -3 而不是形式值131(10000011轉換成十進位制等於131)。所以,為區別起見,將帶符號位的機器數對應的真正數值稱為機器數的真值。

例:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

C 面試筆試題目(選1)

標籤 空格分隔 未分類 看網上文章的同時,把裡面提到的一些基礎問題重新按照自己的話來寫一遍,加深印象。c 中,記憶體分為5個區,分別為 堆 棧 自由儲存區 全域性 靜態儲存區 常量儲存區。在32位編譯器下 short int 2位元組 int 4位元組 unsigned int 4位元組 char ...

面試筆記2(字串)

1.子串的定義時 串中任意個連續的字元組成的子串行,並規定空串是任意串的子串,任意串是其自身的子串。子串行則不要求字元連續,但順序與其在主串中相一致。2.字串末尾的 0意義同0,在c c 中0被轉化為bool型別的false,在條件語句中。3.printf語句在輸出字串時,將 0當做字串的結尾。4....

面試題42 題目2 字串左旋轉

面試題42 題目2 字串左旋轉 組合語言中有一種移位指令叫做迴圈左移 rol 現在有個簡單的任務,就是用字串模擬這個指令的運算結果。對於乙個給定的字串行s,請你把其迴圈左移k位後的序列輸出。例如,字串行s abcxyzdef 要求輸出迴圈左移3位後的結果,即 xyzdefabc 是不是很簡單?ok,...