Last active
November 4, 2019 02:10
-
-
Save HayatoDoi/f0dc205d2ae601e5dbc800a7a39487de to your computer and use it in GitHub Desktop.
strlreplace.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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