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語言面...