質問

文字列内の文字のインデックスを返す C ライブラリ関数はありますか?

これまでのところ、私が見つけたものは、元の文字列内の位置ではなく、見つかった char * を返す strstr のような関数だけです。

役に立ちましたか?

解決

私はそう思います

size_t strcspn ( const char * str1, const char * str2 );

あなたが望むものです。以下はから抜粋した例です ここ:

/* strcspn example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] = "fcba73";
  char keys[] = "1234567890";
  int i;
  i = strcspn (str,keys);
  printf ("The first number in str is at position %d.\n",i+1);
  return 0;
}

他のヒント

strstr 見つかった文字へのポインタを返すため、ポインタ算術を使用できます。(注記:このコードはコンパイル能力についてテストされていないため、疑似コードの一歩手前です。)

char * source = "test string";         /* assume source address is */
                                       /* 0x10 for example */
char * found = strstr( source, "in" ); /* should return 0x18 */
if (found != NULL)                     /* strstr returns NULL if item not found */
{
  int index = found - source;          /* index is 8 */
                                       /* source[8] gets you "i" */
}

編集:strchr は 1 文字の場合にのみ適しています。ポインター演算は「こんにちは!」と言います。

char *pos = strchr (myString, '#');
int pos = pos ? pos - myString : -1;

重要: strchr () は、文字列が見つからない場合は NULL を返します

strstr を使用すると、目的を達成できます。例:

char *a = "Hello World!";
char *b = strstr(a, "World");

int position = b - a;

printf("the offset is %i\n", position);

これにより、次の結果が生成されます。

the offset is 6

純粋な C に完全に縛られておらず、string.h を使用できる場合は、strchr() があります。ここを参照

自分で書いてください:)

BSD ライセンスを取得した C 用の文字列処理ライブラリのコード。 z文字列

https://github.com/fnoyanisi/zString

int zstring_search_chr(char *token,char s){
    if (!token || s=='\0')
        return 0;

    for (;*token; token++)
        if (*token == s)
            return 1;

    return 0;
}

あなたは書ける

s="bvbrburbhlkvp";
int index=strstr(&s,"h")-&s;

のインデックスを見つけるには 'h' 指定された文字化けで。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top