劍指offer面試題:替換空格

https://blog.csdn.net/yanxiaolx/article/details/52235212

?題目:請實現一個函數,把字符串中的每個空格替換成“%20”。例如輸入“We are happy.”,則輸出“We%20are%20happy.”。


解析:時間復雜度為O(n)的解法。







完整代碼及測試用例實現:

[cpp]?view plaincopy
  1. #include<iostream>??
  2. using?namespace?std;??
  3. #include?<cstring>??
  4. ??
  5. //length?為字符數組string的總容量??
  6. void?ReplaceBlank(char?string[],?int?length)??
  7. {??
  8. ????if?(string?==?NULL&&length?<=?0)??
  9. ????{??
  10. ????????return;??
  11. ????}??
  12. ????//reallyLength?為字符串string的實際長度??
  13. ????int?reallyLength?=?0,?numberOfBlank?=?0,i=0;??
  14. ??????
  15. ????while?(string[i]!='\0')??
  16. ????{??
  17. ????????++reallyLength;??
  18. ??
  19. ????????if?(string[i]?==?'?')??
  20. ????????{??
  21. ????????????++numberOfBlank;??
  22. ????????}??
  23. ????????++i;??
  24. ????}??
  25. ??
  26. ????//newLength?為把空格替換成'%20'之后的長度??
  27. ????int?newLength?=?reallyLength?+?numberOfBlank?*?2;??
  28. ????if?(newLength?>?length)??
  29. ????{??
  30. ????????return;??
  31. ????}??
  32. ??
  33. ????int?indexOfReally?=?reallyLength;??
  34. ????int?indexOfNew?=?newLength;??
  35. ????while?(indexOfReally?>=?0?&&?indexOfNew?>indexOfReally)??
  36. ????{??
  37. ????????if?(string[indexOfReally]?==?'?')??
  38. ????????{??
  39. ????????????string[indexOfNew--]?=?'0';??
  40. ????????????string[indexOfNew--]?=?'2';??
  41. ????????????string[indexOfNew--]?=?'%';??
  42. ????????}??
  43. ????????else??
  44. ????????{??
  45. ????????????string[indexOfNew--]?=?string[indexOfReally];??
  46. ????????}??
  47. ??
  48. ????????--indexOfReally;??
  49. ????}??
  50. }??
  51. ??
  52. ??
  53. //?====================測試代碼====================??
  54. void?Test(char*?testName,?char?string[],?int?length,?char?expected[])??
  55. {??
  56. ????if?(testName?!=?NULL)??
  57. ????{??
  58. ????????cout?<<?testName?<<?"?begins:?";??
  59. ????}??
  60. ??
  61. ????ReplaceBlank(string,?length);??
  62. ??
  63. ????if?(expected?==?NULL?&&?string?==?NULL)??
  64. ????{??
  65. ????????cout?<<?"passed."?<<?endl;??
  66. ????}??
  67. ????else?if?(expected?==?NULL?&&?string?!=?NULL)??
  68. ????{??
  69. ????????cout?<<?"failed."?<<?endl;??
  70. ????}??
  71. ????else?if?(strcmp(string,?expected)?==?0)??
  72. ????{??
  73. ????????cout?<<?"passed."?<<?endl;??
  74. ????}??
  75. ????else??
  76. ????{??
  77. ????????cout?<<?"failed."?<<?endl;??
  78. ????}??
  79. }??
  80. ??
  81. ??
  82. void?Test1()??
  83. {??
  84. ????//?空格在句子中間??
  85. ????const?int?length?=?100;??
  86. ??
  87. ????char?string[length]?=?"we?are?happy.";??
  88. ????Test("Test1",?string,?length,?"we%20are%20happy.");??
  89. }??
  90. ??
  91. ??
  92. void?Test2()??
  93. {??
  94. ????//?空格在句子開頭??
  95. ????const?int?length?=?100;??
  96. ??
  97. ????char?string[length]?=?"?wearehappy.";??
  98. ????Test("Test2",?string,?length,?"%20wearehappy.");??
  99. }??
  100. ??
  101. void?Test3()??
  102. {??
  103. ????//?空格在句子末尾??
  104. ????const?int?length?=?100;??
  105. ??
  106. ????char?string[length]?=?"wearehappy.?";??
  107. ????Test("Test3",?string,?length,?"wearehappy.%20");??
  108. }??
  109. ??
  110. void?Test4()??
  111. {??
  112. ????//?連續有兩個空格??
  113. ????const?int?length?=?100;??
  114. ??
  115. ????char?string[length]?=?"we??are?happy.";??
  116. ????Test("Test4",?string,?length,?"we%20%20are%20happy.");??
  117. }??
  118. ??
  119. void?Test5()??
  120. {??
  121. ????//?傳入NULL??
  122. ????Test("Test5",?NULL,?0,?NULL);??
  123. }??
  124. ??
  125. void?Test6()??
  126. {??
  127. ????//?傳入內容為空的字符串??
  128. ????const?int?length?=?100;??
  129. ??
  130. ????char?string[length]?=?"";??
  131. ????Test("Test6",?string,?length,?"");??
  132. }??
  133. ??
  134. void?Test7()??
  135. {??
  136. ????//傳入內容為一個空格的字符串??
  137. ????const?int?length?=?100;??
  138. ??
  139. ????char?string[length]?=?"?";??
  140. ????Test("Test7",?string,?length,?"%20");??
  141. }??
  142. ??
  143. void?Test8()??
  144. {??
  145. ????//?傳入的字符串沒有空格??
  146. ????const?int?length?=?100;??
  147. ??
  148. ????char?string[length]?=?"wearehappy.";??
  149. ????Test("Test8",?string,?length,?"wearehappy.");??
  150. }??
  151. ??
  152. void?Test9()??
  153. {??
  154. ????//?傳入的字符串全是空格??
  155. ????const?int?length?=?100;??
  156. ??
  157. ????char?string[length]?=?"???";??
  158. ????Test("Test9",?string,?length,?"%20%20%20");??
  159. }??
  160. ??
  161. int?main()??
  162. {??
  163. ????Test1();??
  164. ????Test2();??
  165. ????Test3();??
  166. ????Test4();??
  167. ????Test5();??
  168. ????Test6();??
  169. ????Test7();??
  170. ????Test8();??
  171. ????Test9();??
  172. ??
  173. ????system("pause");???
  174. ????return?0;??
  175. }??


運行結果:

Test1 begins: passed.

Test2 begins: passed.

Test3 begins: passed.

Test4 begins: passed.

Test5 begins: passed.

Test6 begins: passed.

Test7 begins: passed.

Test8 begins: passed.

Test9 begins: passed.

請按任意鍵繼續. . .


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383727.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383727.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383727.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫原理及應用【一】引言

什么是數據庫&#xff1a;一個大規模的集成的數據集合 作用&#xff1a;描述現實世界的實體(entities)以及實體之間的關系 管理數據庫的系統軟件&#xff1a;DBMS 文件是一個平滑的字符流&#xff0c;無法完成信息的檢索和管理 數據&#xff08;data&#xff09;:用來描述現…

Linux命令【三】gcc編譯+靜態庫+動態庫+makefile+gdb調試

用C編譯器編譯源文件&#xff1a;gcc 源文件 -o 可執行文件名 詳細步驟&#xff1a; gcc -E a.c -o a.i預處理器將頭文件展開&#xff0c;宏替換&#xff0c;去掉注釋gcc -S a.i -o a.s編譯器將C文件變成匯編文件gcc -c a.s -o a.o匯編器將會變文件變成二進制文件gcc a.o -o a…

用c++模擬實現一個學生成績管理系統

https://blog.csdn.net/yanxiaolx/article/details/53393437題目&#xff1a;用c模擬實現一個學生成績的信息管理系統&#xff0c;要求能添加、刪除、修改、查看和保存學生的信息等功能 源代碼如下:[cpp] view plaincopy#define _CRT_SECURE_NO_WARNINGS #include<iostr…

Linux命令【四】文件+虛擬內存+常用系統函數

File*其實是一個結構體 文件描述符FD&#xff1a;索引到對應的磁盤文件文件讀寫位置指針FP_POS&#xff0c;如果同時讀寫需要注意文件指針的位置I/O緩沖區BUFFER&#xff1a;保存內存指針&#xff0c;默認大小是8kb&#xff0c;用于減小我們對硬盤操作的次數。因為我們對硬盤的…

Python3列表

操作&#xff1a;索引、切片、加、乘、檢查成員、確定序列長度、確定最大最小元素 定義&#xff1a; 列表名 [元素]下標列表名[x] 截取:列表名[x:y] 更新&#xff1a; list[x]y 或者使用append()方法添加列表項刪除&#xff1a; del list[x]常用操作&#xff1a; 截取與…

Linux驚群效應詳解(最詳細的了吧)

https://blog.csdn.net/lyztyycode/article/details/78648798?locationNum6&fps1 linux驚群效應詳細的介紹什么是驚群&#xff0c;驚群在線程和進程中的具體表現&#xff0c;驚群的系統消耗和驚群的處理方法。1、驚群效應是什么&#xff1f;驚群效應也有人叫做雷鳴群體效應…

epoll原理詳解(最清晰)

https://blog.csdn.net/lyztyycode/article/details/79491419我只是把內容搬運過來做個記錄&#xff0c;方便自己以后回頭看。第一部分&#xff1a;select和epoll的任務關鍵詞&#xff1a;應用程序 文件句柄 用戶態 內核態 監控者要比較epoll相比較select高效在什么地方&#x…

Linux命令【五】系統函數

系統文件函數 stat函數 指針如果沒有const一般表示傳出參數&#xff0c;如果加const表示傳入參數 struct stat dev_t st_dev文件設備編號ino_t st_ino節點 inode號是唯一的&#xff0c;每個inode節點的大小一般是128字節活著256字節&#xff0c;一般文件每2KB就設置一個ino…

生產者-消費者模型的兩種實現方式

https://www.cnblogs.com/caolicangzhu/p/7086176.html本文主要來總結生產者-消費者模型的代碼實現,至于其原理,請大家自行百度. 一、基于鏈表的生產-消費模型(條件變量)我們以鏈表為例,生產者進行頭部插入,消費者進行頭部刪除,因此,先將鏈表相關操作封裝為LinkList.h,具體代碼…

Linux系統【一】CPU+MMU+fork函數創建進程

切板中的內容輸出到文件### 進程相關概念 程序&#xff1a;編譯好的二進制文件&#xff0c;在磁盤上&#xff0c;不占用系統資源&#xff08;不包括磁盤&#xff09;。&#xff08;劇本&#xff09; 進程&#xff1a;占用系統資源&#xff0c;是程序的一次運行。&#xff08;戲…

Ubuntu卸載軟件

用過使用dpkg軟件管理工具得到所有已經安裝的軟件&#xff0c;如果不清楚軟件的全名可以使用grep命令進行查找 然后再使用sudo apt-get remove --purge 軟件名卸載軟件&#xff08;--purge參數會刪除配置文件&#xff0c;刪的干凈一些&#xff09; 例如&#xff1a;

一個重要且實用的signal---SIGCHLD

https://blog.csdn.net/lyztyycode/article/details/78150805SIGCHLD(修改)因為筆者之前的文章里面有錯誤&#xff0c;今天發現&#xff0c;立馬做個修改。在下面我的一段關于sigchld信號相對于直接調用wait函數的好處時&#xff0c;我說調用wait函數要一直檢測子進程是否執行完…

數據結構實驗之鏈表七:單鏈表中重復元素的刪除

https://blog.csdn.net/blessingxry/article/details/794455111.知識點&#xff1a;逆序建立鏈表&#xff0b;節點刪除 2.題意&#xff1a;按照數據輸入的相反順序&#xff08;逆位序&#xff09;建立一個單鏈表&#xff0c;并將單鏈表中重復的元素刪除&#xff08;值相同的元素…

Python3函數和代碼復用

函數的定義 def 函數名([參數列表]):注釋函數體注意事項 函數形參不需要聲明類型&#xff0c;可以使用return語句在結束函數執行的同時返回任意類型的值&#xff0c;函數返回值類型與return語句返回表達式i的類型一致 即使該函數不需要接受任何參數&#xff0c;也必須保留一堆…

一文說盡C++賦值運算符重載函數(operator=)

http://www.cnblogs.com/zpcdbky/p/5027481.html在前面&#xff1a;關于C的賦值運算符重載函數(operator)&#xff0c;網絡以及各種教材上都有很多介紹&#xff0c;但可惜的是&#xff0c;內容大多雷同且不全面。面對這一局面&#xff0c;在下在整合各種資源及融入個人理解的基…

Python a和a[:]的區別

簡單來講a[:]是深復制&#xff0c;a是淺復制&#xff0c;相當于賦值a的話是賦值了指針&#xff0c;賦值a[:]相當于復制了a對應的那段空間 例如&#xff1a; a [1,1,1,1,1,1]for x in a:if x1:a.remove(x)print(a)運行結果&#xff1a; remove操作是移除序列中第一個x元素。…

約瑟夫環(c語言程序完整版)

https://blog.csdn.net/m_hahahaha1994/article/details/51742453約瑟夫環&#xff08;約瑟夫問題&#xff09;是一個數學的應用問題&#xff1a;已知n個人&#xff08;以編號1&#xff0c;2&#xff0c;3…n分別表示&#xff09;圍坐在一張圓桌周圍。從編號為k的人開始報數&am…

Linux系統【二】exec族函數及應用

文件描述符 文件描述符表是一個指針數組&#xff0c;文件描述符是一個整數。 文件描述符表對應的指針是一個結構體&#xff0c;名字為file_struct&#xff0c;里面保存的是已經打開文件的信息 需要注意的是父子進程之間讀時共享&#xff0c;寫時復制的原則是針對物理地址而言…

白話C++系列(27) -- RTTI:運行時類型識別

http://www.cnblogs.com/kkdd-2013/p/5601783.htmlRTTI—運行時類型識別 RTTI&#xff1a;Run-Time Type Identification。 那么RTTI如何來體現呢&#xff1f;這就要涉及到typeid和dynamic_cast這兩個知識點了。為了更好的去理解&#xff0c;那么我們就通過一個例子來說明。這個…

使用頭文件的原因和規范

原因 通過頭文件來調用庫功能。在很多場合&#xff0c;源代碼不便&#xff08;或不準&#xff09;向用戶公布&#xff0c;只 要向用戶提供頭文件和二進制的庫即可。用戶只需要按照頭文件中的接口聲明來調用庫 功能&#xff0c;而不必關心接口怎么實現的。編譯器會從庫中提取相應…