C言語で文字列内の部分文字列を見つけてインデックスを返す方法


方法1: strstr関数を使用する方法 C言語の標準ライブラリには、文字列内で部分文字列を見つけるためのstrstr関数が用意されています。この関数は、指定した文字列内で指定した部分文字列を探し、最初に見つかった位置のポインタを返します。

#include <stdio.h>
#include <string.h>
int main() {
    char str[] = "This is a sample string";
    char substr[] = "sample";

    char *ptr = strstr(str, substr);

    if (ptr != NULL) {
        int index = ptr - str;
        printf("部分文字列が見つかりました。インデックス: %d\n", index);
    } else {
        printf("部分文字列が見つかりませんでした。\n");
    }

    return 0;
}

出力結果:

部分文字列が見つかりました。インデックス: 10

方法2: 自前の関数を作成する方法 strstr関数が使用できない場合や、より詳細な処理を行いたい場合は、独自の関数を作成することもできます。以下は、単純な実装例です。

#include <stdio.h>
int findSubstringIndex(const char *str, const char *substr) {
    int strLen = strlen(str);
    int substrLen = strlen(substr);

    for (int i = 0; i <= strLen - substrLen; i++) {
        int j;
        for (j = 0; j < substrLen; j++) {
            if (str[i + j] != substr[j]) {
                break;
            }
        }

        if (j == substrLen) {
            return i;
        }
    }

    return -1;
}
int main() {
    char str[] = "This is a sample string";
    char substr[] = "sample";

    int index = findSubstringIndex(str, substr);

    if (index != -1) {
        printf("部分文字列が見つかりました。インデックス: %d\n", index);
    } else {
        printf("部分文字列が見つかりませんでした。\n");
    }

    return 0;
}

出力結果:

部分文字列が見つかりました。インデックス: 10

これらの方法を使用することで、C言語で文字列内の部分文字列を見つけてインデックスを返すことができます。