Skip to content

Instantly share code, notes, and snippets.

@HayatoDoi
Last active November 4, 2019 02:10
Show Gist options
  • Save HayatoDoi/f0dc205d2ae601e5dbc800a7a39487de to your computer and use it in GitHub Desktop.
Save HayatoDoi/f0dc205d2ae601e5dbc800a7a39487de to your computer and use it in GitHub Desktop.
strlreplace.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/**
* [関数名] strlrep
* [機能] 文字列を置換する
* [引数]
* - src 入力文字列
* - target 置き換え対象となる文字列
* - replace 置き換える文字列
* - src_len 置換後の文字列の長さ
* [戻り値]
* - なし
*/
char *
strlreplace(char *src, const char *target, const char *replace, const size_t src_len) {
char *p, *temp;
temp = (char*)malloc(sizeof(char) * src_len);
if (temp == NULL) {
goto ERR;
}
while ((p = strstr(src, target)) != NULL) {
// 検知した位置に文字列終端文字を挿入
*p = '\0';
// 検知した位置+対象文字数分の位置にポインタを移動
p += strlen(target);
// 該当文字列以降をいったんtempに退避
strlcpy(temp, p, src_len - 1);
// 前半文字列と置き換え文字列を連結する
strlcat(src, replace, src_len - 1);
strlcat(src, temp, src_len - 1);
}
ERR:
free(temp);
return src;
}
int main() {
char *replace = " ";
char *target = "_";
char *src = (char *)malloc(sizeof(char) * 100);
strlcpy(src, "1. this is a test.hoge osdjk shdksjdsjk sdjksdj", 100 - 1);
printf("before: %s\n", src);
// strlreplace(src, replace, target, 100 - 1);
printf("after: %s\n", strlreplace(src, replace, target, 100 - 1));
free(src);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment