字串經典面試題

2021-10-07 09:34:20 字數 1889 閱讀 9633

1、編碼完成下面的處理函式,函式將字串中的字元』『移到字串的前部分,前面的非』』

字元後移,但不能改變非』『字元的先後順序,函式返回串中非』'字元的數量。(要求盡可能

的占用少的時間和輔助空間)。

例如:原始串為autoch**ips,處理後為******autochips,函式返回9.

(1)請用文字或流程圖簡要描述您的思路;

(2)請用c語言程式設計實現,注意時間和空間開銷。

int

move1

(char

* str)

//o(n),o(n)

} rtval =

strlen

(str)

- j -1;

//前面補*

while

(j >=0)

strcpy

(str, arr)

;//將資料複製到str中

free

(arr)

;return rtval;

}//演算法2,利用兩個下標i,j分別到字串的末尾,通過i從後往前遍歷,如果i的資料為非*則將資料複製到j處,

//j往前,如果沒有複製則j不動,最後將前面的部分補充為*

intmove

(char

* str)

//o(n),o(1)

} rtval =

strlen

(str)

- j -1;

while

(j >=0)

return rtval;

}

2.將字串中的空格替換為%20,例如"a b c"->「a%20b%20%20c」

演算法1:額外定義乙個陣列,從前往後遍歷,遇到非空格則在新陣列中新增%20,最後將新陣列中的內容複製到原陣列中

void

space

(char

* str)

}char

* arr =

(char*)

malloc

(strlen

(str)+1

+(count_space *2)

);//這裡空格數不確定,容易記憶體溢位,因此需要計算空格的數量,再申請記憶體

//assert(arr != null);

for(i =

0; i <= l; i++

)else

}strcpy

(str, arr)

;free

(arr);}

intmain()

//演算法2:從前往後遍歷一遍統計空格的數量,利用i定位到字串末尾,j=i+空格數*2;然後從後往前遍歷,非空格數則直接複製,空格則改寫為%20

void

space

(char

* str)

}//定位i到字串結尾並儲存i的值

i =strlen

(str)

;int j = i + count_space *2;

for(

; i >=

0; i--

)//利用i從後往前遍歷字串

else}}

intmain()

3.刪除字串中多餘的空格, 多個空格只保留乙個.「a b c d」->「a b c d」

void

delete_space

(char

* str)

} arr[j]

='\0'

;strcpy

(str, arr)

;free

(arr);}

intmain()

字串高頻面試題。

一 題目 把乙個01 只包含0和1的串 串進行排序。可以交換任意兩個位置,求最少交換的次數。方法 仿造快速排序裡面的partition的過程。最左邊的0和1是沒有意義的,從左到右掃到第乙個1,從右到左掃到第乙個0,然後交換,然後繼續掃下去,就ok啦。include include define ma...

面試題 分割字串

package interview.string public class splitdemo 程式設計 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截半個,如 我abc 4,應該截為 我ab 輸入 我abc漢def 6,應該輸出為 我abc 而不是...

字串相關面試題

面試題目 字串專題 c字串處理函式彙總實現 面試大多會用到 一道面試題 從乙個字串中找出第乙個不重複字元 程式設計師面試題精選100題 36 在字串中刪除特定的字元 一 整數與字串之間的相互轉換 字串處理函式彙總實現 面試大多會用到 轉換字串 插入字元個數 www.firnow.com 常見c語言面...