2-4 squeeze.c
演習2-1で触れてるから、limits.h使っていいよね。
/* * P59 演習2-4 * 文字列s2中の任意の文字に等しい文字をs1から除去するような形の * squeeze(s1, s2)を書け。 * * 2007/06/23 arikui */ #include <limits.h> char* squeeze(char *s1, char *s2){ int i, j; char tbl[CHAR_MAX + 1] = {0}; for(i = 0; s2[i] != '\0'; ++i) tbl[s2[i]] = 1; for(i = 0, j = 0; s1[i] != '\0'; ++i){ if (!tbl[s1[i]]) s1[j++] = s1[i]; } s1[j] = '\0'; return s1; } //Test Driver #include <stdio.h> int main(void){ int i; char *test_s1[] = { "hello, world!", "arikui program", NULL }; char *test_s2[] = {"lo", "ari", NULL}; for(i = 0; test_s1[i] != NULL; ++i) printf("%s\n", squeeze(test_s1[i], test_s2[i])); return 0; }