45

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

これまでのところ、元の文字列内の場所ではなく、見つかった char * を返す strstr などの関数しか見つかりませんでした。

4

7 に答える 7

38

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" */
}
于 2008-08-07T15:04:47.440 に答える
15

と思います

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

あなたが望むものです。hereから取得した例を次に示します。

/* 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;
}
于 2008-08-07T15:09:30.973 に答える
13

編集: strchr は、1 つの文字に対してのみ優れています。ポインター aritmetics は "Hello!" と言います:

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

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

于 2008-08-07T15:05:07.877 に答える
4

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
于 2008-08-07T15:07:47.730 に答える
0

完全に純粋な C に縛られておらず、string.h を使用できる場合は、strchr() を参照してください。

于 2008-08-07T15:04:16.100 に答える