課題
文字列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