星期一, 2月 20, 2017

[ C ] 字串取代


Base為原本的String,find為要被取代的字串,rep是被換作的字串。

先把Base字串做個copy到WalkingString字元指標,
char *WalkingString = Base;

把要回傳回去的result字串malloc一個原本字串大小的空間。
result = (char*)malloc(sizeof(char)*LenBase);

設定Location為找字串的index,就知道目前找到的字串的位置在哪。
Location = strstr(WalkingString, find);

然後用while迴圈來一直找有沒有想要被取代的字串。

用index來記錄WalkingString和Location差了幾個位元,代表Walking和Location之間相差的位元都不是我們要找的字串。
index += (Location - WalkingString);

我們把這中間的字串都保留下來,直到找到字串的位置。
result[index] = '\0';

然後把result重新配置空間,多出來(或少的)空間是被取代的字串和替換的字串相差的長度。
LenBase += (LenRep - LenFind);
tmp = (char*)realloc(result, sizeof(char)*(LenBase));

然後把result重新assign回去取得新的空間。
result = tmp;

之後result就代表在被取代字串前的全部字串,所以接上想要替換的字。
strcat(result, rep);

Location目前為要被取代字串後的字,加上被取代字串的長度,WalkingString代表跳過那字串。
WalkingString = Location + LenFind;

把result加上WalkingString,代表成功取代掉一個字的全部字串。
strcat(result, WalkingString);

index本來是停在被取代字前的,現在加上取代字串的長度,代表完成一個取代。
index += LenRep;

之後重新再找下一個字。
Location = strstr(WalkingString, find);

Source Code

沒有留言: