Re: [問題] replace的問題
※ 引述《jenny0514 (丫丫)》之銘言:
: char *replace(char *dest, char *source, int num) // str2取代str1的函數
: {
: //宣告變數
: char *ptr = dest;
: //找到輸入num在dest的位子
: while(*ptr++ != *(dest+num));
: ptr--;
: //從num的位子,複製字串source
: while((*ptr++=*source++) != '\0');
: return dest;
: }
while(*ptr++ != *(dest+num));
這行可以解讀成「ptr指到的內容不可以等於dest第num個字
元, 否則指向下一個字元」
當 dest = "yili" → dest[ 3 ] == 'i', 迴圈變成這樣
while(*ptr++ != 'i');
這個演算法是錯的!
其實迴圈可以修改成這樣, (dest + num)指向第 num個字元
, ptr 加到跟他一樣為止
while(ptr != dest+num)
++ptr;
然後迴圈執行後 ptr == dest + num, 嗯...你做迴圈幹嘛?
修改後 replace 函式變成這樣 :
char *replace(char *dest, char *source, int num)
{
//宣告變數
char *ptr = dest + num;
//從num的位子,複製字串source
while((*ptr++=*source++) != '\0')
;
return dest;
}
你可以用 debugger 找出來問題也是出在這, 但是你可能連
自己的演算法都不清楚, 就算逐步偵錯也不好發現它, 從結
構上來看, replace 有兩個工作 :
1.找到 dest 第 num 個位置
2.複製 source 到這個位置之後
想想看標準函式庫為什麼要提供 strlen、strcpy ? 把許多
功能組在一起雖然好用, 但是沒有寫成函式分開測試, 也是
不好偵錯的, 所以給你一個練習, 把 replace()改成這樣
char *replace(char *dest, char *source, int num)
{
//宣告變數
char *ptr = dest + num;
//從num的位子,複製字串source
strCpy( ptr, source );
return dest;
}
測試完 strCpy() 確定沒問題後, 才開始寫 replace(), 因
為每個函式都是小小的, 發現問題你馬上就能知道是第幾行
有錯.
--
◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去
████◤ ██ ◢██◣█ ██ ████ ██ s ~> T-ara
█/███ ██ ██ ██ █/█ ◢███ █/█ 歡迎您的光臨
████◤ ██ ██ ██ ██◤ ███◤ ██◤ 恩靜、智妍、孝敏
█/███ ██ █/██◤ ██ █/██ ██ 素妍、居麗、寶藍
████◤ █◤ ◥██◤ █◤ ████◤█◤ ψmakigoto123
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (11/12 10:53)
→
11/12 11:36, , 1F
11/12 11:36, 1F
推
11/12 16:37, , 2F
11/12 16:37, 2F
討論串 (同標題文章)