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

голоса
38

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

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

Задан 07/08/2008 в 16:00
источник пользователем
На других языках...                            


7 ответов

голоса
33

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" */
}
Ответил 07/08/2008 в 16:04
источник пользователем

голоса
11

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

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

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

Ответил 07/08/2008 в 16:05
источник пользователем

голоса
10

я думаю что

size_t strcspn (Const символ * str1, Const символ * 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;
}
Ответил 07/08/2008 в 16:09
источник пользователем

голоса
3

Вы можете использовать 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
Ответил 07/08/2008 в 16:07
источник пользователем

голоса
0

Ты можешь написать

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

найти индекс 'h'в данном засорять.

Ответил 15/01/2018 в 14:18
источник пользователем

голоса
0

Написать свой собственный :)

Код с 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;
}
Ответил 18/02/2016 в 23:49
источник пользователем

голоса
0

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

Ответил 07/08/2008 в 16:04
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more