[YukiWiki] [[doReplace()]]

[ トップ | 一覧 | 編集 | 差分 | 単語検索 | 最終更新 | ]

[[doReplace()]]とは何か



/*

	doReplace 

	文字列 des の中で最初に現れた str0 を str1 に書き換える。 
	des が十分大きく無いと、どうなるかはわからない。 

	例えば des が [A][str0][B] であれば str0 を str1 に置き換え [A][str1][B] になる。 
	このとき戻り値は B のポインタになる(B に対して doReplace を行うため) 
 */ 
char * doReplace( char * des, char * str0, char * str1 ) 
{ 
	char *p; 
	char t[SIZE_BUF]; 

	int str0_length; 
	int str1_length; 

	/* 置き換えるべき文字列の位置を取得 */ 
	p = strstr(des, str0); 
	if (p == NULL) { 
		return NULL; 
	} 

	str0_length = strlen(str0); 
	str1_length = strlen(str1); 

	/* 部分文字列以後の文字列を一時保存 */ 
	strcpy(t, p + str0_length); 

	/* des に書き戻す */ 
	strcat(p, str1); 
	strcat(p + str1_length, c); 

	/* 部分文字列以後の文字列の位置を返す */ 
		return p + str1_length; 
} 


こんなのはどうかな。

char * doReplace( char * des, const char * str0, const char * str1 ) {

	char *p; 

	int str0_length; 
	int str1_length; 

	/* 置き換えるべき文字列の位置を取得 */ 
	p = strstr(des, str0); 
	if (p == NULL) { 
		return NULL; 
	} 

	str0_length = strlen(str0); 
	str1_length = strlen(str1); 

	/* 後ろの部分を目的の位置まで移動 */
	memmove( p + str1_length, p + str0_length, strlen(p + str0_length)+1 );

	/* str1をはめ込む */
	memcpy( p, str1, str1_length );

	/* 部分文字列以後の文字列の位置を返す */ 
	return p + str1_length; 
} 



YukiWiki 1.6.2 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by aki.