C言語のsqueeze関数とは?2つの文字列から共通する文字を削除する方法
squeeze(s1,s2) または squeeze(char[], char[]) は、ユーザー定義関数の一つです。2つの文字列を比較し、両方に共通して含まれる文字(重複する文字)を削除するために使用されます。
問題
C言語において、squeeze関数を使って2つの文字列に共通する文字を削除するには、どのようにコードを書けばよいのでしょうか?
解決策
このプログラムでは、ユーザーがコンソールから2つの文字列を入力します。そして、1つ目の文字列から「2つ目の文字列にも含まれている文字」を取り除き、その結果を画面に表示します。
処理の流れ
- キーボードから2つの文字列(string1、string2)を読み込みます。
- squeeze関数を呼び出し、string1の各文字がstring2内に存在するかどうかを順番にチェックします。
- string2に存在しない文字だけを新しい位置にコピーし、最後に終端文字 '\0' を追加します。
- 加工後の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」が出力されています。
-
C言語の文字操作を徹底解説!宣言方法と入出力関数の使い方
Cプログラミング言語において、文字(character)は英大文字(A〜Z)、英小文字(a〜z)、数字(0〜9)、空白(ホワイトスペース)、または特殊記号のいずれかとして扱われます。文字の宣言方法C言語で文字型変数を宣言する際は、char 型を使用します。文字定数はシングルクォーテーション( )で囲んで指定します。char a = A; /* 文字定数を使用した宣言 */このように宣言することで、変数 a に1文字分のデータを格納できます。文字入出力関数の種類C言語には、文字を入出力するための関数がいくつか用意されています。代表的なものは以下の3組です。scanf / printf: 書式指定
-
C言語のstrcmp()関数とは?文字列比較の基本と使い方を徹底解説
C言語の標準ライブラリ関数 int strcmp(const char *str1, const char *str2) は、ポインタ str1 が指し示す文字列と、str2 が指し示す文字列を比較するための関数です。C言語において、文字型の配列は「文字列」と呼ばれます。まずは文字列の基本的な扱い方から確認していきましょう。文字列の宣言文字列(文字配列)の宣言は以下のように行います。char stringname [size];例えば、char string[50]; と宣言すれば、最大50文字の長さを持つ文字列を格納できます。文字列の初期化文字列の初期化には、主に次の2つの方法があります。1