frostar@wiki
strrep
最終更新:
frostar
-
view
文字列を置換する関数strrepの作成。
char* strrep(
PTSTR _Str,//対象文字列
PTSTR _StrFrom,//置換元文字列
PTSTR _StrTo//置換先文字列
){
char* s = strstr(_Str,_StrFrom);
if(s!=NULL){
char* e=s+strlen(_StrFrom);
int nStrLen = strlen(_Str);
int nShift = s-e+strlen(_StrTo);
memmove(e+nShift,e,strlen(e)+1);
memcpy(s,_StrTo,strlen(_StrTo));
return s;
}
return NULL;
}
戻り値は、置換できた場合、対象文字列の置換場所の先頭のアドレス。置換できなかった場合(置換元の文字列が存在しなかった場合)はNULLを返す。
最初にstrstrによって、対象文字列から置換元の文字列を検索し、そのアドレスをsに格納する。
sがNULLでなければeに置換元の文字列終端の次のアドレスを格納する。
nShiftには、置換後にeより先の文字がどの程度ずれるかを計算する。
その後、memmoveによって対象文字列のeより先をnShift分だけずらした後、置換後文字列を対象文字列にコピーする。
ただし、_StrFromより_StrToの長さが大きいと_Strのサイズを超える可能性があり、このコードではその場合について処理を行っていない。
また、このコードでは対象文字列に複数個の置換元文字列が存在する場合は、先頭のほうにある文字列を置換する。
もし、すべて置換元文字列を置換したい場合は、戻り値がNULLになるまで、この関数に引き渡し続ければいい。
最初にstrstrによって、対象文字列から置換元の文字列を検索し、そのアドレスをsに格納する。
sがNULLでなければeに置換元の文字列終端の次のアドレスを格納する。
nShiftには、置換後にeより先の文字がどの程度ずれるかを計算する。
その後、memmoveによって対象文字列のeより先をnShift分だけずらした後、置換後文字列を対象文字列にコピーする。
ただし、_StrFromより_StrToの長さが大きいと_Strのサイズを超える可能性があり、このコードではその場合について処理を行っていない。
また、このコードでは対象文字列に複数個の置換元文字列が存在する場合は、先頭のほうにある文字列を置換する。
もし、すべて置換元文字列を置換したい場合は、戻り値がNULLになるまで、この関数に引き渡し続ければいい。










