- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- char *replace(char *dst, const char *src, const char *rep_from, const char *rep_by)
- {
- //*dst = 0;
- const char *start = src;
- char *end;
- size_t len = strlen(rep_from);
- while(end = strstr(start, rep_from)) {
- strncat(dst, start, end - start);
- strcat(dst, rep_by);
- start = end + len;
- }
- strcat(dst, start);
- return dst;
- }
- int splitcat(char *dst, char *src, const char *split)
- {
- char *end;
- if(end = strstr(src, split)) {
- strncat(dst, src, end - src);
- return end - src + strlen(split);
- }
- else {
- strcat(dst, src);
- }
- return 0;
- }
- char *split(char* **dst, char *src, const char *split)
- {
- int len = strlen(src) + 1;
- char *mem = malloc(len);
- memset(mem, 0, len);
- char *tmp = mem;
- char* *addr = (char* *) malloc(8);
- int index = 0;
- int pos;
- while(pos = splitcat(tmp, src, split)) {
- addr[index++] = tmp;
- realloc(addr, (index + 2) * 4);
- src += pos;
- tmp += pos;
- }
- addr[index] = tmp;
- // end flag
- addr[index + 1] = 0;
- *dst = addr;
- return mem;
- }
- int main()
- {
- // split
- char *src = "$$pal$$123$$4561$$999$$aaaa$$1234$$";
- printf("origin str:%s\\n", src);
- char **addr;
- char *mem = split(&addr, src, "$$");
- printf("split result:\\n");
- int i = 0;
- while(*addr) {
- printf("addr[%d] = %s\\n", i, *addr);
- ++addr;
- ++i;
- }
- free(mem);
- free(addr);
- // replace
- char dst[100] = {0};
- replace(dst, src, "$$", "__");
- printf("replace result:%s\\n", dst);
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/1712201411298.html
来源: http://www.codesnippet.cn/detail/1712201411298.html