Char配列内のcharのインデックスを返す関数がcにありますか?
たとえば次のようなもの:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
int index = findIndexOf( values, find );
strchr
は最初のオカレンスへのポインターを返すため、インデックスを見つけるには、開始ポインターのオフセットを取得します。例えば:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
const char *ptr = strchr(values, find);
if(ptr) {
int index = ptr - values;
// do something
}
int index = strchr(values,find)-values;
find
が見つからない場合、strchr
はNULL
を返すため、インデックスは負になることに注意してください。
size_t strcspn(const char *str, const char *set)
もあります。 s
に含まれるset
内の文字の最初の出現のインデックスを返します。
size_t index = strcspn(values, "E");
安全な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;
}
Strposはどうですか?
#include <string.h>
int index;
...
index = strpos(values, find);
Strposはゼロで終了する文字列を想定していることに注意してください。つまり、最後に '\ 0'を追加する必要があります。それができない場合は、手動でループして検索することになります。
strchr を使用して最初のオカレンスへのポインターを取得し、それを(nullでない場合)元のchar *から減算して位置を取得できます。