文字列 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';
}