[PR]

部分文字列を置換する

戻る

 部分文字列を置換する関数を作る。

//*********************************************************
// 文字列 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歳馬!!]

Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
『新妻LOVELY×CATION』を応援しています!