C言語

【C言語】文字列に含まれる特定の文字、部分文字列をカウントする

プログラミング初心者向けの練習問題の一つとして、対象の文字列に含まれる特定の文字、又は部分文字列のカウントするプログラムの作成があります。

本記事では、対象の文字列に含まれる特定の文字、又は部分文字列のカウント処理をプログラムに実装する方法について解説しています。

特定の文字をカウントするプログラム

まずは対象の文字列に含まれる特定の文字をカウントするプログラムの実装方法を解説します。

なお、このプログラムでは長さ1を超える部分文字列をカウントすることはできません。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. ユーザに処理対象の文字列と文字を入力させる
  2. 初期値0のint型変数(カウンタ)を用意する
  3. 入力された文字列の先頭から末尾まで一文字ずつチェック
    →1で入力された文字と一致すればカウンタの値を+1

実装例

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  char str[100];
  char alphabet[10];

  printf("文字列を入力して下さい:");
  scanf("%s", str);
  printf("検索する文字を入力して下さい:");
  scanf("%s", alphabet);
  printf("-----------------------------------\n");

  /* 
  検索する文字として入力された値が
  長さ1を超える部分文字列ではないことをチェック
  */
  int count = 0;
  for (int i=0; alphabet[i]!='\0'; i++) {
    count++;
  }
  if (count==1) {
    /*
    文字列の先頭から末尾までチェックして
    検索対象の文字があればカウンタの値を1プラスする
    */
    count = 0;
    for (int i=0; str[i]!='\0'; i++) {
      if (str[i]==alphabet[0]) {
        count++;
      }
    }
    printf("検索対象の文字は%d個含まれています。\n", count);
  } else {
    printf("長さ1以上の部分文字列の検索はできません。\n");
  }
  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

文字列を入力して下さい:aabbcc
検索する文字を入力して下さい:a
-----------------------------------
検索対象の文字は2個含まれています。
文字列を入力して下さい:aabbcc
検索する文字を入力して下さい:aa
-----------------------------------
長さ1以上の部分文字列の検索はできません。

発展:部分文字列をカウントするプログラム

次に対象の文字列に含まれる部分文字列をカウントするプログラムの実装方法を解説します。

なお、このプログラムは特定の文字も長さ1の部分文字列としてカウントすることが可能であるため、先ほど紹介したプログラムの上位互換のような立ち位置になります。

プログラム作成の手順

プログラム作成の手順は以下の通りです。

  1. ユーザに処理対象の文字列と部分文字列を入力させる
  2. 初期値0のint型変数(カウンタ)を用意する
  3. 入力された文字列の先頭から末尾まで一文字ずつチェック
    →1で入力された部分文字列があればカウンタの値を+1

実装例

上記の手順に従ってプログラムを作成します。使用する言語はC言語です。

#include <stdio.h>

int main(void){

  char str[100];
  char substr[100];

  printf("文字列を入力して下さい:");
  scanf("%s", str);
  printf("検索する部分文字列を入力して下さい:");
  scanf("%s", substr);
  printf("----------------------------------------\n");

  /*
  文字列の先頭から末尾までチェックして
  検索対象の部分文字列があればカウンタの値を1プラスする
  */
  int count = 0;
  for (int i=0; str[i]!='\0'; i++) {
    int flag = 1;
    for (int j=0; substr[j]!='\0'; j++) {
      if (str[i+j]=='\0' || str[i+j]!=substr[j]) {
        flag = 0;
        break;
      }
    }
    if (flag==1) {
      count++;
    }
  }
  printf("検索対象の部分文字列は%d個含まれています。\n", count);
  return 0;
}

このプログラムを実行すると以下の出力結果が得られます。

文字列を入力して下さい:aaaaa
検索する部分文字列を入力して下さい:aaa
----------------------------------------
検索対象の部分文字列は3個含まれています。