[ トップ | 一覧 | 編集 | 差分 | 単語検索 | 最終更新 | ]
/*
someReplace
src の中の str0 をすべて str1 に置き換えた文字列を des に入れて返す。 des は呼び出し側で十分なメモリ取っといてな */ int someReplace(char * src, char * des, char * str0, char * str1 ) { char temp[SIZE_BUF]; int str0_length = strlen(str0); int str1_length = strlen(str1);
/* 置き換える文字列を取っとく */ strcpy( des, src );
/* まだ文字列が残っていればループ */ while (des) {
/* 置き換えるべき文字列の位置を取得 */ des = strstr( des, str0 ); if (des == NULL) { break; }
/* 部分文字列以後の文字列を一時保存 */ strcpy(temp, des + str0_length);
/* des に書き戻す */ strcpy(des, str1); strcat(des + str1_length, temp);
/* 部分文字列以後の文字列の位置を返す */ des += str1_length; }
return 1; }
doReplace のを真似て
int someReplace(char * src, char * des, char * str0, char * str1 ) {
int str0_length = strlen(str0); int str1_length = strlen(str1);
/* 置き換える文字列を取っとく */ strcpy(des, src);
/* まだ文字列が残っていればループ */ while (des) {
/* 置き換えるべき文字列の位置を取得 */ des = strstr(des, str0); if (des == NULL) { break; }
/* 後ろの部分を目的の位置まで移動 */ memmove(des + str1_length, des + str0_length, strlen(des+str0_length)+1);
/* str1をはめ込む */ memcpy(des, str1, str1_length);
/* 部分文字列以後の文字列の位置を返す */ des += str1_length; }
return 1; }
int someReplace(char * src, char * des, char * str0, char * str1 ) { int str0_length = strlen(str0); int str1_length = strlen(str1); char * p; int head_len;
/* str1が見つかるあいだループ */ while ( p = strstr(src, str0) ) { /* str0の前までをコピー */ head_len = p - src; memcpy( dest, src, head_len ); dest += head_len;
/* str1をはめこむ */ memcpy( dest, str1, str1_length ); dest += str1_length;
/* str0の長さを飛ばし、次に読む地点に進める */ src = p + str0_length; }
strcpy( dest, src );
return 1; }
YukiWiki 1.6.2 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by aki.