C 經典面試題 十二

2021-07-03 12:57:54 字數 1999 閱讀 5541

最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。

一是從來沒有這個意識,二是沒有認真的梳理下。

96.字串的替換操作replace (string &s, string &t, string &v)是指:

若t是s的子串,則用串v替換串t在串s中的所有出現;若t不是s的子串,則串s不變。例如,若串s為「aabbabcbaabaaacbab」,串t為「bab」,串v為「abdc」,則執行replace操作後,串s中的結果為「aababdccbaabaaacabdc」。試利用字串的基本運算實現這個替換操作。

【參***】

string & string :: replace ( string & t, string &v)

string temp( ch );//用當前串建立乙個空的臨時字串

ch[0] = '\0';

curlen = 0; //當前串作為結果串,初始為空

int j, k = 0, l; //存放結果串的指標

while ( id != -1 )

for ( j = 0; j < l; j++ )

ch[k++] = v.ch[j];

//連線替換串v到結果串ch後面

if ( curlen == maxlen )

break; //字串超出範圍

for ( j = id + t.curlen; j < temp.curlen; j++ )

temp.ch[j- id - t.curlen] = temp.ch[j]; //刪改原來的字串 temp.curlen -= ( id + t.curlen );

id = temp.find ( t );

} return *this;

}

97.試編寫乙個求解josephus問題的函式。用整數序列1, 2, 3, ……, n表示順序圍坐在圓桌周圍的人,並採用陣列表示作為求解過程中使用的資料結構。然後使用n = 9, s = 1, m = 5,以及n = 9, s = 1, m = 0,或者n = 9, s = 1, m = 10作為輸入資料,檢查你的程式的正確性和健壯性。

【參***】

void josephus( int a[ ], int n, s, m )

for ( i = 0; i < n; i++ )

a[i] = i + 1; /*初始化,執行n次*/

i = s - 1; /*報名起始位置*/

for ( k = n; k > 1; i-- ) /*逐個出局,執行n-1次*/ }

for ( k = 0; k < n / 2; k++ ) /*全部逆置, 得到出局序列*/

}

之前我也寫過乙個用陣列解的約瑟夫環

約瑟夫環的兩種實現

98.編寫類 string 的建構函式、析構函式和賦值函式已知類 string 的原型為: 

class string

;

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

【標準答案】 

// string 的析構函式

string::~string(void)

// string 的普通建構函式

string::string(const char *str)

else

}

// 拷貝建構函式

string::string(const string &other)

// 賦值函式

string & string::operate =(const string &other)

已完。。。沒了(*^_v_^*)

c 經典面試題

1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...

C 經典面試題

1.輸入乙個字串,將其逆序後輸出。使用c 不建議用偽碼 include using namespace std void main a p malloc 1024 應該寫成 p char malloc 1024 沒有釋放p的空間,造成記憶體洩漏。8.下面的 有什麼問題?並請給出正確的寫法。void ...

C 經典面試題

c 知識總結目錄索引 二 哪些函式不能宣告成虛函式 三 為什麼析構函式和建構函式內不能呼叫虛函式 四 為什麼析構函式最好宣告成虛函式 五 實現乙個不能被繼承的類 六 實現乙個類定義出來的物件都在堆上面 七 實現乙個類定義出來的物件都在棧上面 八 實現乙個類,定義出的物件不能在堆上 九 用c語言實現繼...