strstrで大文字小文字区別なく部分検索を行うサンプル関数

C言語にて部分検索を行うには strstr 関数を使用します。ただしこの関数は大文字と小文字の区別を行います。区別なく検索する必要があったので関数を作成しました。この関数を紹介します。
バッファは5012で取得していますのでこれを超えると正常に動作しません。必要に応じて変更してください。またstrcpy はセキュリティ上問題あるため、プラットフォームに応じて必要な関数に置き換えてください。

変数は第一パラメータを検索対象の文字列、第二パラメータは検索文字列としています。これらを一度小文字に変換した後、標準の部分検索関数である strstr を使用しています。

名前は 関数名に i を挟んで stristr としています。多言語は標準で装備されている場合があるようですが、私の環境のコンパイラでは存在しませんでした。

スポンサーリンク

Visual C++ 向けサンプルコード


#include <stdio.h>
#include <string>
bool stristr(char *bigStr,char *smallStr)
{
		char bufBig[5012];
		char bufSmall[5012];

		char *p;

		strcpy(bufBig,bigStr);
		strcpy(bufSmall, smallStr);

		//小文字に変換する
		for (p = bufBig; *p; p++)
			*p = tolower(*p);

		for (p = bufSmall; *p; p++)
			*p = tolower(*p);

//printf(bufBig);
//printf(bufSmall); if (strstr(bufBig, bufSmall)) return true; else return false; return true; } int main() {
bool ret = stristr("abcdefg","AB");
if (ret)
printf("1:OK\n");
ret = stristr("abcdefg","hi");
if (ret)
printf("2:OK\n");
ret = stristr("これはテスト(test)メッセージです。","ES");
if (ret)
printf("3:OK\n");
ret = stristr("これはテスト(test)メッセージです。","HIJ");
if (ret)
printf("4:OK\n");
ret = stristr("This is a book。","THIS");
if (ret)
printf("5:OK\n"); }

スポンサーリンク



[Visual C++ サンプルコード | 即戦力ソース集に戻る]

本サンプルコードではエラー処理を省略している場合があります。実践で使用する場合はエラー処理が必要となる場合があります。