文字列"qwerty"
があり、その中のe
文字のインデックス位置を検索するとします。 (この場合、インデックスは2
になります)
Cでどうすればよいですか?
strchr
関数を見つけましたが、インデックスではなく文字へのポインターを返します。
Strchrが返すものから文字列アドレスを減算します。
char *string = "qwerty";
char *e;
int index;
e = strchr(string, 'e');
index = (int)(e - string);
結果はゼロベースであるため、上記の例では2になります。
strcspn(string, "e")
を使用することもできますが、複数の可能性のある文字の検索を処理できるため、これははるかに遅くなる可能性があります。 strchr
を使用してポインターを減算するのが最善の方法です。
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.
}
このコードは現在テストされていませんが、適切な概念を示しています。
どうですか:
char *string = "qwerty";
char *e = string;
int idx = 0;
while (*e++ != 'e') idx++;
元の文字列を保持するためにeにコピーします。
これはそれを行う必要があります:
//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);
}