Skip to content

Instantly share code, notes, and snippets.

@pallove
Created August 16, 2014 08:17
Show Gist options
  • Save pallove/f420d56455bfd3d7b8ba to your computer and use it in GitHub Desktop.
Save pallove/f420d56455bfd3d7b8ba to your computer and use it in GitHub Desktop.
字符窜分割与替换函数
#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;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment