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になるまで、この関数に引き渡し続ければいい。