部分文字列を置換する関数を作る。 //********************************************************* // 文字列 String の文字列 From を文字列 To で置換する。 // 置換後の文字列 String のサイズが String の記憶領域を超える場合の動作は未定義。 //********************************************************* char *StrReplace( char *String, const char *From, const char *To ) { int nToLen; // 置換する文字列の長さ int nFromLen; // 検索する文字列の長さ int nShift; char *start; // 検索を開始する位置 char *stop; // 文字列 String の終端 char *p; nToLen = strlen( To ); nFromLen = strlen( From ); nShift = nToLen - nFromLen; start = String; stop = String + strlen( String ); // 文字列 String の先頭から文字列 From を検索 while( NULL != ( p = strstr( start, From ) ) ) { // 文字列 To が複写できるようにする start = StrShift( p + nFromLen, nShift ); stop = stop + nShift; // 文字列 To を複写 memmove( p, To, nToLen ); } return String; }//StrReplace 使用例// 置換後の文字列長が 38 なので、配列 String は 39 以上のサイズが必要。 int main( void ) { char String[39] = "勝ったのは風船ガムを吹く男4歳馬!"; printf( "size=%d [%s]\n", strlen(String)+1, String ); StrReplace( String, "風船ガムを吹く男", "バブルガムフェロー" ); printf( "size=%d [%s]\n", strlen(String)+1, String ); StrReplace( String, "!", "!!" ); printf( "size=%d [%s]\n", strlen(String)+1, String ); return 0; }//main 実行結果size=35 [勝ったのは風船ガムを吹く男4歳馬!] size=37 [勝ったのはバブルガムフェロー4歳馬!] size=39 [勝ったのはバブルガムフェロー4歳馬!!] | |