#include <stdio.h> #include <stdlib.h> #include <string.h>
char *str_create(const char *str) { int len = strlen(str); char *pStr = (char *)calloc(len + 1, sizeof(char)); if (pStr != NULL) strcpy(pStr, str); return pStr; }
int str_concat(char **p, const char *str) { int oldlen = strlen(*p); int len = strlen(str); int newsize = oldlen + len + 1; char *q = realloc(*p, newsize * sizeof(char)); if (q == NULL) return 0; *p = q; strcpy(*p + oldlen, str); return 1; }
int str_insert(char **p, const int pos, const char *str) { int oldlen = strlen(*p); int len = strlen(str); int newsize = oldlen + len + 1; char *q = realloc(*p, newsize * sizeof(char)); if (q == NULL) return 0; *p = q; memmove(*p + pos + len, *p + pos, oldlen - pos + 1); memcpy(*p + pos, str, len); return 1; }
int str_replace_once(const char *find, const char *replace, char **p) { char *ch = strstr(*p, find); int newsize, oldlen, flen, rlen, pos; char *q; if (ch == NULL) return 0; pos = ch - *p; oldlen = strlen(*p); flen = strlen(find); rlen = strlen(replace); newsize = oldlen - flen + rlen + 1; q = realloc(*p, newsize * sizeof(char)); if (q == NULL) return 0; *p = q; ch = *p + pos; memmove(ch + rlen, ch + flen, oldlen - pos - flen + 1); // including \0 at the end memcpy(ch, replace, rlen); return 1; }
int str_replace(char *find, char *replace, char **p) { int count = 0; while (str_replace_once(find, replace, p)) count++; return count; }
int str_reset(char **p, const char *newstr) { int len = strlen(newstr); char *q = realloc(*p, (len + 1) * sizeof(char)); if (q == NULL) return 0; *p = q; strcpy(*p, newstr); return 1; }
int main(int argc, char *argv[]) { char *str = str_create("abcdef"); // str = "abcdef" int count; puts(str); str_concat(&str, "123456"); // str += "123456" puts(str); str_insert(&str, 2, "CD"); puts(str); str_replace_once("f1", "{mine}", &str); puts(str); str_reset(&str, "ababababca"); // str = "ababababc" puts(str); count = str_replace("b", "?", &str); puts(str); printf("Replacement count: %d\n", count); count = str_replace("a", "{you}", &str); puts(str); printf("Replacement count: %d\n", count); str_insert(&str, 0, "The result is "); // str = str + ... str_concat(&str, "."); puts(str); free(str); return 0; }
|