已知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,...