version 1.1, 2001/10/04 19:34:36 |
version 1.2, 2001/10/09 15:01:33 |
|
|
#include <stdio.h> |
#include <stdio.h> |
#include <string.h> |
#include <string.h> |
#include <stdlib.h> |
#include <stdlib.h> |
|
#include <stdarg.h> |
|
|
#include "strdyn.h" |
#include "strdyn.h" |
|
|
Line 20 int strcnt(char *s, char c) { |
|
Line 21 int strcnt(char *s, char c) { |
|
|
|
#endif |
#endif |
|
|
|
char **strdyn_create(void) { |
|
register char **ar; |
|
|
|
if ((ar = (char **) malloc(1 * sizeof(char *))) == NULL) |
|
return NULL; |
|
|
|
ar[0] = NULL; |
|
|
|
return ar; |
|
} |
|
|
|
char **strdyn_add_va(char **ar, ...) { |
|
register char *s; |
|
va_list ap; |
|
|
|
va_start(ap, ar); |
|
|
|
while ((s = va_arg(ap, char *)) != NULL) |
|
if ((strdyn_add(ar, s)) == NULL) |
|
return NULL; |
|
|
|
va_end(ap); |
|
} |
|
|
|
char **strdyn_create_va(char *s1, ...) { |
|
register char **ar; |
|
|
|
if ((ar = strdyn_create()) == NULL) |
|
return NULL; |
|
|
|
if (s1 != NULL) { |
|
register char *s; |
|
va_list ap; |
|
|
|
if ((ar = strdyn_add(ar, s1)) == NULL) |
|
return NULL; |
|
|
|
va_start(ap, s1); |
|
|
|
while ((s = va_arg(ap, char *)) != NULL) |
|
if ((ar = strdyn_add(ar, s)) == NULL) |
|
return NULL; |
|
|
|
va_end(ap); |
|
} |
|
|
|
return ar; |
|
} |
|
|
|
|
void strdyn_free(char **ar) { |
void strdyn_free(char **ar) { |
register int i = 0; |
register int i; |
|
|
while (ar[i] != NULL) |
for (i = 0; ar[i] != NULL; i++) |
free(ar[i++]); |
free(ar[i]); |
|
|
free(ar); |
free(ar); |
} |
} |
Line 116 char *strdyn_implode(char **ar, char sep |
|
Line 167 char *strdyn_implode(char **ar, char sep |
|
register int i, str_size; |
register int i, str_size; |
register char *str, *s; |
register char *str, *s; |
|
|
i = 0; |
for (i = 0, str_size = 0; ar[i] != NULL; ) |
str_size = 0; |
|
while (ar[i] != NULL) |
|
str_size += strlen(ar[i++]) + 1; |
str_size += strlen(ar[i++]) + 1; |
|
|
if ((str = (char*) malloc(str_size * sizeof(char))) == NULL) |
if ((str = (char*) malloc(str_size * sizeof(char))) == NULL) |
return NULL; |
return NULL; |
|
|
i = 0; |
for (i = 0, s = str; ar[i] != NULL; i++) { |
s = str; |
|
while (ar[i] != NULL) { |
|
strcpy(s, ar[i]); |
strcpy(s, ar[i]); |
s += strlen(ar[i]); |
s += strlen(ar[i]); |
|
|
if (ar[i + 1] != NULL) |
if (ar[i + 1] != NULL) |
*s++ = sep; |
*s++ = sep; |
|
|
i++; |
|
} |
} |
|
|
return str; |
return str; |
Line 152 char *strdyn_implode2(char **ar, char se |
|
Line 197 char *strdyn_implode2(char **ar, char se |
|
return s; |
return s; |
} |
} |
|
|
|
char **strdyn_conjunct(char **ar1, char **ar2) { |
|
register int i; |
|
register char **ar; |
|
|
|
if ((ar = strdyn_create()) == NULL) |
|
return NULL; |
|
|
|
for (i = 0; ar2[i] != NULL; i++) { |
|
if (! strdyn_compare(ar1, ar2[i])) { |
|
if ((ar = strdyn_add(ar, ar2[i])) == NULL) |
|
return NULL; |
|
} |
|
} |
|
|
|
return ar; |
|
} |
|
|
|
char **strdyn_consolide(char **ar1, char **ar2) { |
|
register int i; |
|
register char **ar; |
|
|
|
if ((ar = strdyn_create()) == NULL) |
|
return NULL; |
|
|
|
for (i = 0; ar1[i] != NULL; i++) { |
|
if (strdyn_compare(ar, ar1[i])) { |
|
if ((ar = strdyn_add(ar, ar1[i])) == NULL) |
|
return NULL; |
|
} |
|
} |
|
|
|
for (i = 0; ar2[i] != NULL; i++) { |
|
if (strdyn_compare(ar, ar2[i])) { |
|
if ((ar = strdyn_add(ar, ar2[i])) == NULL) |
|
return NULL; |
|
} |
|
} |
|
|
|
return ar; |
|
} |
|
|
|
char **strdyn_add(char **ar, char *s) { |
|
register int count; |
|
|
|
count = strdyn_get_size(ar); |
|
|
|
if ((ar = (char **) realloc(ar, (count + 2) * sizeof(char *))) == NULL) |
|
return NULL; |
|
|
|
ar[count] = strdup(s); |
|
ar[count + 1] = NULL; |
|
|
|
return ar; |
|
} |
|
|
|
char **strdyn_add_ar(char **ar, char **s_ar) { |
|
register int k; |
|
|
|
for (k = 0; s_ar[k] != NULL; k++) { |
|
if ((ar = strdyn_add(ar, s_ar[k])) == NULL) |
|
return NULL; |
|
} |
|
|
|
return ar; |
|
} |
|
|
int strdyn_search(char **ar, char *s) { |
int strdyn_search(char **ar, char *s) { |
register int i; |
register int i; |
|
|
Line 178 int strdyn_compare_all(char **ar, char * |
|
Line 289 int strdyn_compare_all(char **ar, char * |
|
|
|
#if defined(SELF) || defined(SELFTEST) |
#if defined(SELF) || defined(SELFTEST) |
|
|
//#define TESTSTR "^^^QQQ^----^^_^_a12$$-a^^^^" |
#define TESTSTR1 "___AAA_BBBB__C_DaDaD____" |
#define TESTSTR "-" |
/* #define TESTSTR "-" */ |
#define TESTSEP '^' |
#define TESTSEP1 '_' |
|
|
int main(void) { |
int main(void) { |
|
|
register int i; |
register int i; |
char **ar; |
char **ar1, **ar2, **ar_join, **ar_intersect; |
char *s; |
char *s; |
|
|
|
ar2 = strdyn_create_va("A", "B", "C", "D", NULL); |
|
|
|
i = 0; |
|
while (ar2[i] != NULL) { |
|
printf("ar2[%d] = \"%s\"\n", i, ar2[i]); |
|
i++; |
|
} |
|
|
printf("strcnt(\"%s\", '%c') = %d\n", |
printf("strcnt(\"%s\", '%c') = %d\n", |
TESTSTR, TESTSEP, strcnt(TESTSTR, TESTSEP)); |
TESTSTR1, TESTSEP1, strcnt(TESTSTR1, TESTSEP1)); |
|
|
printf("strdyn_explode(\"%s\", '%c') = ar\n", TESTSTR, TESTSEP); |
printf("strdyn_explode(\"%s\", '%c') = ar1\n", TESTSTR1, TESTSEP1); |
ar = strdyn_explode2(TESTSTR, TESTSEP); |
ar1 = strdyn_explode2(TESTSTR1, TESTSEP1); |
|
|
i = 0; |
i = 0; |
while (ar[i] != NULL) { |
while (ar1[i] != NULL) { |
printf("ar[%d] = \"%s\"\n", i, ar[i]); |
printf("ar1[%d] = \"%s\"\n", i, ar1[i]); |
i++; |
i++; |
} |
} |
|
|
s = strdyn_implode2(ar, TESTSEP); |
s = strdyn_implode2(ar1, TESTSEP1); |
printf("strdyn_implode(ar, '%c') = \"%s\"\n", TESTSEP, s); |
printf("strdyn_implode(ar1, '%c') = \"%s\"\n", TESTSEP1, s); |
|
|
|
ar_join = strdyn_join(ar1, ar2); |
|
ar_intersect = strdyn_intersect(ar1, ar2); |
|
|
|
i = 0; |
|
while (ar_join[i] != NULL) { |
|
printf("ar_join[%d] = \"%s\"\n", i, ar_join[i]); |
|
i++; |
|
} |
|
|
|
i = 0; |
|
while (ar_intersect[i] != NULL) { |
|
printf("ar_intersect[%d] = \"%s\"\n", i, ar_intersect[i]); |
|
i++; |
|
} |
|
|
|
puts("strdyn_free(ar1)"); |
|
strdyn_free(ar1); |
|
|
|
puts("strdyn_free(ar2)"); |
|
strdyn_free(ar2); |
|
|
|
puts("strdyn_free(ar_join)"); |
|
strdyn_free(ar_join); |
|
|
puts("strdyn_free(ar)"); |
puts("strdyn_free(ar_intersect)"); |
strdyn_free(ar); |
strdyn_free(ar_intersect); |
|
|
puts("free(s)"); |
puts("free(s)"); |
free(s); |
free(s); |