今回は、「文字列に特定文字が含まれているかどうかを調べるプログラム」である。
このプログラムでは、文字列sの中に英文字cが含まれていれば、その添字(文字列中に英文字cが複数ある場合は、最も先頭の添字とする。)を返し、含まれていなければ-1を返す関数を作成するものとする。
なお、本プログラムは、Windows 11 Home(23H2)上で、 Visual Studio Code(1.89.1)を使用して作成し、gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0でコンパイルしている。
文字列に特定文字が含まれているかどうかを調べるプログラム
//文字列に特定文字が含まれているかどうかを調べるプログラム
#include <stdio.h>
//文字列s中の最も先頭に位置する文字cを探索
int str_char(const char s[],int c)
{
for (int i = 0; s[i] != '\0'; i++)
if (s[i] == c)
return i;
return -1;
}
int main(void)
{
int no;
char ch[10];
printf("アルファベットを一字入力してください:");
scanf("%s",ch);
no = str_char("ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz",ch[0]);
if(no >= 0 && no <= 25)
printf("それは英大文字の%d番目です。\n",no + 1);
else if (no >= 26 && no <= 51 )
printf("それは英小文字の%d番目です。\n",no - 25);
else
printf("それは英文字ではありません。\n");
return 0;
}
実行結果
アルファベットを一字入力してください:M
それは英大文字の13番目です。
アルファベットを一字入力してください:t
それは英小文字の20番目です。
アルファベットを一字入力してください:8
それは英文字ではありません。
関数str_charは、「配列sの要素のうち、最も先頭に格納されている文字cの添字の値を返す」関数である。行っているのは、文字cを探すことであり、線形探索と同じ原理である。
本プログラムは、大文字のA~Zと小文字a~zを並べた文字列から探索を行う。
探索するのは、キーボードから入力された文字列の先頭文字である。
(参考)新・解きながら学ぶC言語 第2版 柴田望洋 (監修・著), 由梨かおる(著)SBクリエイティブ
コメント