C言語入門講座。関数、サンプル集を参考にして、 C言語をマスターしよう。初心者から上級者まで。

文字列から文字のセットを検索し、文字の位置を返す

2012.08.10

strpbrk関数は、文字列から文字のセットに含まれる文字を検索し、その位置を返します。

#include <string.h>
char *strpbrk(const char *s, const char *accept);

*sは検索対象文字列を指定します。
*acceptは検索する文字のセットを指定します。

戻り値として、文字セット中の文字と一致した文字の位置(ポインタ)を返します。一致しなかった場合はNULLを返します。

プログラム 例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1024

int main()
{
  FILE             *fp;
  char             path[50];
  char             key_set[11];
  char             buff[SIZE];
  char             *buff_ptr;
  int              key_cnt;

  printf('ファイルのパス名を入力してください ==> ');
  scanf('%s', path);

  if ((fp = fopen(path, 'r')) == NULL) {
    fprintf(stderr, '%sのオープンができませんでした\n', path);
    exit(EXIT_FAILURE);
  }

  printf('検索する文字セットを入力してください(10文字以下) ==> ');
  scanf('%s', key_set);

  key_cnt = 0;
  while(fgets(buff, SIZE, fp) != NULL) {
    buff_ptr = buff;
    while (*buff_ptr) {
      /* 文字セットに有る文字を検索 */
      if ((buff_ptr = strpbrk(buff_ptr, key_set)) != NULL) {
        ++key_cnt;
        ++buff_ptr;
      }
      else {
        break;
      }
    }
  }
  fclose(fp);

  printf('%sファイルには「%s」のセットが%d個ありました\n',
         path, key_set, key_cnt);

  return EXIT_SUCCESS;
}

例の実行結果

$ cat temp.txt
#include <stdio.h>

int main()
{
  printf('Hello World!!.\n');

  return 0;
}
$
$ ./strpbrk.exe
ファイルのパス名を入力してください ==> temp.txt
検索する文字セットを入力してください(10文字以下) ==> (){}
temp.txtファイルには「(){}」のセットが6個ありました
$
$ ./strpbrk.exe
ファイルのパス名を入力してください ==> temp.txt
検索する文字セットを入力してください(10文字以下) ==> ;
temp.txtファイルには「;」のセットが2個ありました
$
$ ./strpbrk.exe
ファイルのパス名を入力してください ==> temp.txt
検索する文字セットを入力してください(10文字以下) ==> WH
temp.txtファイルには「WH」のセットが2個ありました
$

関連記事