web-dev-qa-db-ja.com

char配列内のcharのインデックスを返す関数がcにありますか?

Char配列内のcharのインデックスを返す関数がcにありますか?

たとえば次のようなもの:

char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';

int index = findIndexOf( values, find );
20
Josh Curren

strchrは最初のオカレンスへのポインターを返すため、インデックスを見つけるには、開始ポインターのオフセットを取得します。例えば:

char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';

const char *ptr = strchr(values, find);
if(ptr) {
   int index = ptr - values;
   // do something
}
49
Jesse Beder
int index = strchr(values,find)-values;

findが見つからない場合、strchrNULLを返すため、インデックスは負になることに注意してください。

size_t strcspn(const char *str, const char *set)もあります。 sに含まれるset内の文字の最初の出現のインデックスを返します。

size_t index = strcspn(values, "E");
4
John Bode

安全なindex_of()関数は、何も見つからない場合でも機能します(その場合は-1を返します)。

#include <stddef.h>
#include <string.h>
ptrdiff_t index_of(const char *string, char search) {
    const char *moved_string = strchr(string, search);
    /* If not null, return the difference. */
    if (moved_string) {
        return moved_string - string;
    }
    /* Character not found. */
    return -1;
}
2
Konrad Borowski

Strposはどうですか?

#include <string.h>

int index;
...
index = strpos(values, find);

Strposはゼ​​ロで終了する文字列を想定していることに注意してください。つまり、最後に '\ 0'を追加する必要があります。それができない場合は、手動でループして検索することになります。

strchr を使用して最初のオカレンスへのポインターを取得し、それを(nullでない場合)元のchar *から減算して位置を取得できます。

0
Ed S.