Is there a function in c that will return the index of a char in a char array?

后端 未结 6 1632
难免孤独
难免孤独 2021-01-01 14:20

Is there a function in c that will return the index of a char in a char array?

For example something like:

char values[] = \"0123456789ABCDEFGHIJKLMN         


        
相关标签:
6条回答
  • 2021-01-01 14:24

    There's also size_t strcspn(const char *str, const char *set); it returns the index of the first occurence of the character in s that is included in set:

    size_t index = strcspn(values, "E");
    
    0 讨论(0)
  • 2021-01-01 14:34
    int index = strchr(values,find)-values;
    

    Note, that if there's no find found, then strchr returns NULL, so index will be negative.

    0 讨论(0)
  • 2021-01-01 14:45

    You can use strchr to get a pointer to the first occurrence and the subtract that (if not null) from the original char* to get the position.

    0 讨论(0)
  • 2021-01-01 14:48

    strchr returns the pointer to the first occurrence, so to find the index, just take the offset with the starting pointer. For example:

    char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    char find = 'E';
    
    const char *ptr = strchr(values, find);
    if(ptr) {
       int index = ptr - values;
       // do something
    }
    
    0 讨论(0)
  • 2021-01-01 14:48

    Safe index_of() function that works even when it finds nothing (returns -1 in such case).

    #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;
    }
    
    0 讨论(0)
  • 2021-01-01 14:48

    What about strpos?

    #include <string.h>
    
    int index;
    ...
    index = strpos(values, find);
    

    Note that strpos expects a zero-terminated string, which means you should add a '\0' at the end. If you can't do that, you're left with a manual loop and search.

    0 讨论(0)
提交回复
热议问题