【C言語】指定した文字列が何文字目にあるのか検索する方法

この記事では、C言語で文字列を検索する方法について解説します。

目次から探す

文字列の検索方法

文字列を検索する方法には、いくつかのアプローチがあります。

文字列を一文字ずつ比較する方法

文字列を一文字ずつ比較する方法は、基本的なアルゴリズムです。

以下の手順で実装することができます。

  1. 検索対象の文字列と検索する文字列を用意します。
  2. 検索対象の文字列の先頭から順に、検索する文字列の先頭と一致するかどうかを比較します。
  3. 一致しない場合は、検索対象の文字列を1文字ずつずらして再度比較します。
  4. 一致する場合は、検索対象の文字列の位置を出力します。

以下に、この方法を用いたサンプルコードを示します。

#include <stdio.h>
#include <string.h>
int search_string(char* target, char* search) {
    int target_len = strlen(target);
    int search_len = strlen(search);
    for (int i = 0; i <= target_len - search_len; i++) {
        int j;
        for (j = 0; j < search_len; j++) {
            if (target[i + j] != search[j]) {
                break;
            }
        }
        if (j == search_len) {
            return i + 1; // 検索結果の位置を返す
        }
    }
    return -1; // 検索結果が見つからなかった場合
}
int main() {
    char target[] = "Hello, World!";
    char search[] = "World";
    int result = search_string(target, search);
    if (result != -1) {
        printf("検索結果: %d文字目\n", result);
    } else {
        printf("検索結果: 見つかりませんでした\n");
    }
    return 0;
}

上記のコードでは、search_string関数を定義しています。

この関数は、検索対象の文字列と検索する文字列を引数として受け取り、検索結果の位置を返します。

main関数では、targetsearchという文字列を用意し、search_string関数を呼び出して検索を行っています。

この方法は、文字列を一文字ずつ比較するため、大きな文字列や複数の文字列を検索する場合には効率が悪いです。

ライブラリ関数を使った方法

C言語には、文字列を検索するための便利なライブラリ関数が用意されています。

その中でも、strstr関数は特によく使われます。

この関数を使うと、指定した文字列が他の文字列内に存在するかどうかを簡単に検索することができます。

以下に、strstr関数を使ったサンプルコードを示します。

#include <stdio.h>
#include <string.h>
int main() {
    char target[] = "Hello, World!";
    char search[] = "World";
    char* result = strstr(target, search);
    if (result != NULL) {
        int position = result - target + 1; // 検索結果の位置を計算
        printf("検索結果: %d文字目\n", position);
    } else {
        printf("検索結果: 見つかりませんでした\n");
    }
    return 0;
}

上記のコードでは、strstr関数を使って検索を行っています。

targetsearchという文字列を用意し、strstr関数を呼び出して検索を行います。

strstr関数は、検索結果の位置をポインタとして返すため、そのポインタを使って位置を計算しています。

strstr関数は、大文字と小文字を区別します。

大文字と小文字を区別せずに検索する場合は、別途処理を行う必要があります。

以上が、C言語で文字列を検索する方法です。

目次から探す