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;
}