[ トップ | 一覧 | 編集 | 差分 | 単語検索 | 最終更新 | ]
/*
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.