这是我的尝试
#include <stdio.h>
void replacemarks(char *dst, const char *src, char c, const char *r) {
while (1) {
while (*src && (*src != c)) *dst++ = *src++;
if (*src == 0) break;
*dst++ = *src++;
if (*src == 0) break;
const char *cc = strchr(src + 1, c);
if (cc) {
const char *rr = r;
while (*rr) *dst++ = *rr++;
src = cc;
*dst++ = *src++;
} else {
while (*src) *dst++ = *src++;
break;
}
}
*dst = 0;
}
int main(void) {
char line[100];
while (fgets(line, sizeof line, stdin)) {
char src[100], c, r[100], dst[100];
sscanf(line, "%s %c%s", src, &c, r);
replacemarks(dst, src, c, r);
printf("replacemarks(..., \"%s\", '%c', \"%s\") ==> \"%s\"\n",
src, c, r, dst);
}
return 0;
}
见https://ideone.com/LhJaaq
使用输入运行示例
hello_from_here _ 21223
this_is_name _ 000044
阿布拉卡达布拉 r foo
*一二三* * - -
*一二三四* * - -
*一二三四 * - -
一二三四* * - -
*一二三四五* * - -
*一二三四五 * - -
一二三四五* * - -
输出(针对 Stack Overflow 进行美化):
替换标记(...,“hello_from_here”,“_”,“21223”)==>“hello_21223_here”
替换标记(...,“this_is_name”,“_”,“000044”)==>“this_000044_name”
replacemarks(..., "abracadabra", 'r', "foo") ==> "abrfoora"
replacemarks(..., "*one*two*three*", '*', "----") ==> "*----*two*----*"
replacemarks(..., "*one*two*three*four*", '*', "----") ==> "*----*two*----*four*"
replacemarks(..., "*one*two*three*four", '*', "----") ==> "*----*two*----*four"
replacemarks(..., "一*二*三*四*", '*', "----") ==> "一*----*三*----*"
replacemarks(..., "*一*二*三*四*五*", '*', "----") ==> "*----*二*----*四* ----*”
replacemarks(..., "*一*二*三*四*五", '*', "----") ==> "*----*二*----*四*五"
replacemarks(..., "一*二*三*四*五*", '*', "----") ==> "一*----*三*----*五* "