Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のsqueeze関数とは?2つの文字列から共通する文字を削除する方法


squeeze(s1,s2) または squeeze(char[], char[]) は、ユーザー定義関数の一つです。2つの文字列を比較し、両方に共通して含まれる文字(重複する文字)を削除するために使用されます。

問題

C言語において、squeeze関数を使って2つの文字列に共通する文字を削除するには、どのようにコードを書けばよいのでしょうか?

解決策

このプログラムでは、ユーザーがコンソールから2つの文字列を入力します。そして、1つ目の文字列から「2つ目の文字列にも含まれている文字」を取り除き、その結果を画面に表示します。

処理の流れ

  1. キーボードから2つの文字列(string1、string2)を読み込みます。
  2. squeeze関数を呼び出し、string1の各文字がstring2内に存在するかどうかを順番にチェックします。
  3. string2に存在しない文字だけを新しい位置にコピーし、最後に終端文字 '\0' を追加します。
  4. 加工後のstring1を出力します。

サンプルコード

squeeze関数の動作を示すCプログラムは以下の通りです。

#include<stdio.h>
void squeeze(char string1[], char string2[]);// プロトタイプ宣言
int main(){
   char string1[50];
   char string2[30];
   printf("enter the string1:");
   scanf("%s", string1);// キーボードからstring1を読み込む
   printf("enter the string2:");
   scanf("%s", string2);// キーボードからstring2を読み込む
   squeeze(string1, string2);// squeeze関数を呼び出す
   printf("Final string is:%s\n", string1);
   return 0;
}
void squeeze(char string1[], char string2[]){
   int i, j, k;
   for(i = k = 0; string1[i] != '''\0''; i++){
      // string2の中に一致する文字があるかどうかを調べる空ループ
      for(j = 0; string2[j] != '''\0'' && string2[j] != string1[i]; j++)
         ;
      // 一致する文字が見つからなければ、その文字を残す
      if(string2[j] == '''\0'')
         string1[k++] = string1[i];
   }
   string1[k] = '''\0'';
}

実行結果

上記プログラムの実行結果は以下の通りです。

Enter the string1 : Tutorial
Enter the string2 : ut
Final string : Torial

この例では、1つ目の文字列「Tutorial」から、2つ目の文字列「ut」に含まれる文字「u」と「t」がすべて削除され、「Torial」が出力されています。


  1. C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方

    Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定

  2. C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説

    C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1