黒ピーマン工房 2020/09/05 05:38

2020/09/04の記録-文字列置換を作ってたら寝落ち!

画像は寂しいサムネを回避するために出てきて貰ったドラゴンくん。

今日はプログラミングの日。
文字列置換処理が欲しいと思い、Cには純正で存在しないため自作していました。
途中で子供の寝かしつけをしていたら自分も寝ていました。
子持ちあるある。

私は別にものすごく出来が良いわけでもないので、とても苦労しました。
とりあえず何とか動いてるっぽいものができたのでコードをぺたぺた。

int Util::StrReplace(const char* target, const char* needle, const char* replace, char* ret, int maxSize) {
	int result = -1;

	const char* resultPtr = strstr(target, needle); // どこにあるか調べておく

	int index = 0;
	int retIndex = 0;

	while (target[index] != '\0') {
		// ヌル文字に当たるまで繰り返す
		if (&target[index] == resultPtr) {
			// 検索した結果のポインタに当たったら置き換え文字の挿入
			result = index;
		
			strncat_s(ret, maxSize, replace, sizeof(replace));

			// 検索位置をその分進める
			index += strlen(needle);
			retIndex = strlen(ret);

		} else {
			// 異なる場合は単純にコピー
			ret[retIndex] = target[index];
			++retIndex;
			++index;
		}

	}

	ret[retIndex] = '\0'; // 末尾にNULL文字を入れておく

	return result;
}

多分結構危ないコード。
例外処理とか色々足りてないと思われます。
個人使用なのであまり細かくケアするつもりはありませんが、実行環境をぶっ壊すバグだけは入れないように気を付けます。

月別アーカイブ

限定特典から探す

記事を検索