K&R演習[2-4]

課題

文字列s2中の任意の文字に等しい文字をs1から除去するような形のsqueeze(s1, s2)を書け。

回答

#include <stdio.h>
#include <string.h>

void squeeze(char s1[], char s2[]);

const int OK = 1;
const int NG = 0;

/**
 * @fn		Main
 * @brief
 * @param
 * @return
 * @detail
 */
int main(void)
{
	char str[30];

	sprintf(str, "abcdefghijklmnopqrstuvwxyz");
	squeeze(str, "aekmx");
	printf("%s\n", str);
}


/**
 * @fn		squeeze
 * @brief	s1[]から、s2[]に含まれる文字を削除する
 * @param	
 * @return	
 * @detail	
 */

void squeeze(char s1[], char s2[])
{
	int i, j, k;
	char flg = OK;

	for (i = j = 0; s1[i] != '\0'; i++) {	// 

		// s1のある文字が、s2[]の全文字と一致していないか確認する
		flg = OK;	// 初期値:一致しない
		for (k = 0; s2[k] != '\0'; k++) {	// s2[]の全文字を対象に
			if (s1[i] == s2[k]) {			// 一致判定
				flg = NG;					// 一致した
			}
		}
		if (flg == OK) {				// 一致していなければ
			s1[j++] = s1[i];			// 残す。
		}
	}
	s1[j] = '\0';
}

実行結果

bcdfghijlnopqrstuvwyz