web-dev-qa-db-ja.com

Cの文字列内の文字のインデックスを見つけるにはどうすればよいですか?

文字列"qwerty"があり、その中のe文字のインデックス位置を検索するとします。 (この場合、インデックスは2になります)

Cでどうすればよいですか?

strchr関数を見つけましたが、インデックスではなく文字へのポインターを返します。

33
bodacydo

Strchrが返すものから文字列アドレスを減算します。

char *string = "qwerty";
char *e;
int index;

e = strchr(string, 'e');
index = (int)(e - string);

結果はゼロベースであるため、上記の例では2になります。

65
wj32

strcspn(string, "e")を使用することもできますが、複数の可能性のある文字の検索を処理できるため、これははるかに遅くなる可能性があります。 strchrを使用してポインターを減算するのが最善の方法です。

7
R..
void myFunc(char* str, char c)
{
    char* ptr;
    int index;

    ptr = strchr(str, c);
    if (ptr == NULL)
    {
        printf("Character not found\n");
        return;
    }

    index = ptr - str;

    printf("The index is %d\n", index);
    ASSERT(str[index] == c);  // Verify that the character at index is the one we want.
}

このコードは現在テストされていませんが、適切な概念を示しています。

3
abelenky

どうですか:

char *string = "qwerty";
char *e = string;
int idx = 0;
while (*e++ != 'e') idx++;

元の文字列を保持するためにeにコピーします。

1
Dan Molik

これはそれを行う必要があります:

//Returns the index of the first occurence of char c in char* string. If not found -1 is returned.
int get_index(char* string, char c) {
    char *e = strchr(string, c);
    if (e == NULL) {
        return -1;
    }
    return (int)(e - string);
}
1
Varun Narayanan