【C言語】大文字小文字を区別せずに文字列検索を行う方法

この記事では、C言語で大文字小文字を区別せずに文字列を検索する方法を紹介します。

目次から探す

大文字小文字を区別せずに文字列を検索する方法

プログラミングにおいて、文字列を検索する際には、大文字と小文字を区別するかどうかが重要な要素となります。

C言語では、大文字小文字を区別せずに文字列を検索する方法がいくつかあります。

方法1: 文字列をすべて小文字に変換してから検索する

この方法では、検索対象の文字列をすべて小文字に変換し、検索する文字列も同様に小文字に変換します。

これにより、大文字小文字を区別せずに文字列を検索することができます。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
    char str[] = "Hello, World!";
    char search[] = "world";
    
    // 文字列をすべて小文字に変換
    for (int i = 0; str[i]; i++) {
        str[i] = tolower(str[i]);
    }
    
    // 検索する文字列も小文字に変換
    for (int i = 0; search[i]; i++) {
        search[i] = tolower(search[i]);
    }
    
    // 文字列を検索
    char* result = strstr(str, search);
    
    if (result) {
        printf("文字列が見つかりました。\n");
    } else {
        printf("文字列が見つかりませんでした。\n");
    }
    
    return 0;
}

上記のコードでは、tolower関数を使用して文字列を小文字に変換しています。

そして、strstr関数を使用して変換した文字列を検索しています。

もし文字列が見つかれば、文字列が見つかりました。と表示されます。

方法2: 大文字小文字を区別しない検索関数を使用する

C言語には、大文字小文字を区別しないで文字列を検索するための関数が用意されています。

その一つが、strcasestr関数です。

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "Hello, World!";
    char search[] = "world";
    
    // 文字列を検索
    char* result = strcasestr(str, search);
    
    if (result) {
        printf("文字列が見つかりました。\n");
    } else {
        printf("文字列が見つかりませんでした。\n");
    }
    
    return 0;
}

上記のコードでは、strcasestr関数を使用して大文字小文字を区別せずに文字列を検索しています。

もし文字列が見つかれば、文字列が見つかりました。と表示されます。

方法3: 正規表現を使用して大文字小文字を区別せずに検索する

正規表現を使用することで、より柔軟な文字列の検索が可能となります。

C言語では、正規表現を扱うためのライブラリとして、regex.hが提供されています。

#include <stdio.h>
#include <regex.h>
int main() {
    char str[] = "Hello, World!";
    char pattern[] = "world";
    
    regex_t regex;
    int reti;
    
    // 正規表現をコンパイル
    reti = regcomp(&regex, pattern, REG_ICASE);
    if (reti) {
        printf("正規表現のコンパイルに失敗しました。\n");
        return 1;
    }
    
    // 文字列を検索
    reti = regexec(&regex, str, 0, NULL, 0);
    if (!reti) {
        printf("文字列が見つかりました。\n");
    } else if (reti == REG_NOMATCH) {
        printf("文字列が見つかりませんでした。\n");
    } else {
        printf("正規表現の実行に失敗しました。\n");
        return 1;
    }
    
    // 正規表現を解放
    regfree(&regex);
    
    return 0;
}

上記のコードでは、regcomp関数を使用して正規表現をコンパイルし、regexec関数を使用して文字列を検索しています。

REG_ICASEフラグを指定することで、大文字小文字を区別せずに検索を行います。

もし文字列が見つかれば、文字列が見つかりました。と表示されます。

以上が、C言語で大文字小文字を区別せずに文字列を検索する方法です。

それぞれの方法を適切に使い分けることで、より効率的な文字列検索が可能となります。

目次から探す