プログラミング言語 C 2.4
文字列 s2の中の任意の文字に等しい文字を s1から除去するような
squeeze(s1, s2)を書きなさい、という問題。しかし Cだと特にテストを
書いてみるって重要な気がしてきた。なんとなくうまくいくときもある
言語なのでそこはしっかりとしないとね。
#include <stdio.h> #include <string.h> #include <assert.h> #include <stdlib.h> static void squeeze(char *s1, char *s2); static void test_squeeze(void); int main (int argc, char **argv) { if (argc != 3) { fprintf(stderr, "Invalid Argument Number\n"); exit(EXIT_FAILURE); } test_squeeze(); squeeze(argv[1], argv[2]); printf("answer = %s\n", argv[1]); return 0; } static void test_squeeze() { char s1[100] = ""; char *s2 = ""; squeeze(s1, s2); assert(!strcmp(s1, "")); strcpy(s1, "a"); squeeze(s1, "b"); assert(!strcmp(s1, "a")); squeeze(s1, "a"); assert(!strcmp(s1, "")); strcpy(s1, "abcde"); squeeze(s1, "ace"); assert(!strcmp(s1, "bd")); } static void squeeze(char *s1, char *s2) { int i, j, k; for (i = 0, j = 0; s1[i] != '\0'; i++) { for (k = 0; s1[i] != s2[k] && s2[k] != '\0'; k++) { /* EMPTY */ } if (k == strlen(s2)) { s1[j++] = s1[i]; } } s1[j] = '\0'; }