Сведения о вопросе

NOTtoday

16:03, 1st July, 2020

Теги

c   string    

String.indexOf функция в C

Просмотров: 398   Ответов: 7

Существует ли библиотечная функция C, которая возвращает индекс символа в строке?

До сих пор все, что я нашел, - это функции типа strstr, которые возвращают найденный символ*, а не его местоположение в исходной строке.



  Сведения об ответе

dump

18:03, 1st July, 2020

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" */
}


  Сведения об ответе

davran

18:03, 1st July, 2020

Я думаю, что

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;
}


  Сведения об ответе

#hash

18:03, 1st July, 2020

EDIT: strchr лучше только для одного символа. Указатель aritmetics говорит "Hellow!":

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

Важно: strchr () возвращает NULL, если строка не найдена


  Сведения об ответе

lats

18:03, 1st July, 2020

Вы можете использовать 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


  Сведения об ответе

прога

18:03, 1st July, 2020

Если вы не полностью привязаны к чистому C и можете использовать string.h, есть strchr() Видеть здесь


  Сведения об ответе

DO__IT

18:03, 1st July, 2020

Написать свой :)

Код из лицензированной библиотеки обработки строк BSD для C, называемой zString

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;
}


  Сведения об ответе

SEEYOU

18:03, 1st July, 2020

Вы можете писать

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

найти индекс 'h' в данном искажении.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться