作者Neverfor (yorker)
看板C_and_CPP
標題[問題]C語言如何更改字串中的字串
時間Mon May 16 22:36:00 2016
如題
假設有
char str1[]="I am a student";
char str2[]="student";
char str3[]="hamburger";
想要把"I am a student"
改成 "I am a hamburger"
我有寫出
1.找到student的s的index的自訂函數,假設此函數return為pos。
2.欲取代字串之長度的函數,假設return
為replacement_length
3.原字串長度的函數,假設return
為length
那要如何用 pos str2 str1 length_和replacement_length用一個自定義函數replace更
改str1中的指定的str2為str3呢
字數一樣的很好改 但字數不一樣就要牽扯到位移方面的問題
麻煩各位大大了><
可以給個小暗示嗎QQ
我自己是想在自定義函數裡先刪掉 student (也就是從pos往左位移length)然後往右位移
replacement_length
再在pos補str3
補程式碼
http://codepad.org/qku4yiMd
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.83.155.11
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1463409362.A.256.html
1F:推 james732: 這個例子不會造成越界存取嗎?05/16 22:57
什麼是越界存取QQ
我蔡b8
2F:→ Caesar08: 所以簡單來說,就是你要把一段字串裡的A字串改成B字串?05/16 23:42
3F:→ Caesar08: 如果是這樣,那你要先考慮原本字串大小的問題05/16 23:43
4F:→ Caesar08: 如果原字串太小,那到時候replace時,就會有未定義行為05/16 23:44
5F:→ descent: 用 c 太難了05/16 23:45
我才大一只學過c哈哈
6F:→ james732: 如果你連array的範圍都沒概念的話就很難說了orz05/16 23:50
大概知道你的意思了 超過宣告的大小吼QQ
我自己做到往左位移那裡都ok
往右位移我是從結束字元的上一個開始往前更改 這裡編譯的過但是執行不了
應該到這裡都還沒有所謂越界存取的問題QQ
7F:→ phishingphi: 編譯不過這個不是compiler會跟你說message嗎?不至於05/17 01:24
8F:→ phishingphi: 不知道錯在哪裡05/17 01:24
編譯的過 但執行不了XDD
※ 編輯: Neverfor (223.141.99.132), 05/17/2016 11:55:10
9F:→ MOONRAKER: 可短不可長,長了你就只好產生加長的陣列把原來的陣列 05/17 12:22
10F:→ MOONRAKER: 指標蓋掉。如果原始陣列不准改,那便無解。 05/17 12:23
11F:→ MOONRAKER: 這也是C的字串不好用的地方 但若不是非要在原來陣列內 05/17 12:24
12F:→ MOONRAKER: 更改 那也還好 實用上也是如此 05/17 12:24
13F:推 EdisonX: 一個疑問... 不考慮用 string.h 嗎 ?? 05/17 23:07
14F:推 sss22213: 十三戒先看一下 05/23 23:04