// String replaceing UINT ReplaceStrEx(char *dst, UINT size, char *string, char *old_keyword, char *new_keyword, bool case_sensitive) { UINT i, j, num; UINT len_string, len_old, len_new; UINT len_ret; UINT wp; char *ret; // Validate arguments if (string == NULL || old_keyword == NULL || new_keyword == NULL) { return 0; } // Get the length of the string len_string = StrLen(string); len_old = StrLen(old_keyword); len_new = StrLen(new_keyword); // Calculate the final string length len_ret = CalcReplaceStrEx(string, old_keyword, new_keyword, case_sensitive); // Memory allocation ret = Malloc(len_ret + 1); ret[len_ret] = '\0'; // Search and Replace i = 0; j = 0; num = 0; wp = 0; while (true) { i = SearchStrEx(string, old_keyword, i, case_sensitive); if (i == INFINITE) { Copy(ret + wp, string + j, len_string - j); wp += len_string - j; break; } num++; Copy(ret + wp, string + j, i - j); wp += i - j; Copy(ret + wp, new_keyword, len_new); wp += len_new; i += len_old; j = i; } // Copy of the search results StrCpy(dst, size, ret); // Memory release Free(ret); return num; }
// 文字列の置換 UINT ReplaceStrEx(char *dst, UINT size, char *string, char *old_keyword, char *new_keyword, bool case_sensitive) { UINT i, j, num; UINT len_string, len_old, len_new; UINT len_ret; UINT wp; char *ret; // 引数チェック if (string == NULL || old_keyword == NULL || new_keyword == NULL) { return 0; } // 文字列長の取得 len_string = StrLen(string); len_old = StrLen(old_keyword); len_new = StrLen(new_keyword); // 最終文字列長の計算 len_ret = CalcReplaceStrEx(string, old_keyword, new_keyword, case_sensitive); // メモリ確保 ret = Malloc(len_ret + 1); ret[len_ret] = '\0'; // 検索と置換 i = 0; j = 0; num = 0; wp = 0; while (true) { i = SearchStrEx(string, old_keyword, i, case_sensitive); if (i == INFINITE) { Copy(ret + wp, string + j, len_string - j); wp += len_string - j; break; } num++; Copy(ret + wp, string + j, i - j); wp += i - j; Copy(ret + wp, new_keyword, len_new); wp += len_new; i += len_old; j = i; } // 検索結果のコピー StrCpy(dst, size, ret); // メモリ解放 Free(ret); return num; }