最近看一些面試題,覺得如果自己被問到了,並不能很利落的回答出來。
一是從來沒有這個意識,二是沒有認真的梳理下。
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語言實現繼...