Find firstlast occurrence of a specific character strchr strrchr
suggest changeThe strchr
and strrchr
functions find a character in a string, that is in a NUL-terminated character array. strchr
return a pointer to the first occurrence and strrchr
to the last one.
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char toSearchFor = 'A'; /* Exit if no second argument is found. */ if (argc != 2) { printf("Argument missing.\n"); return EXIT_FAILURE; } { char *firstOcc = strchr(argv[1], toSearchFor); if (firstOcc != NULL) { printf("First position of %c in %s is %td.\n", toSearchFor, argv[1], firstOcc-argv[1]); /* A pointer difference's result is a signed integer and uses the length modifier 't'. */ } else { printf("%c is not in %s.\n", toSearchFor, argv[1]); } } { char *lastOcc = strrchr(argv[1], toSearchFor); if (lastOcc != NULL) { printf("Last position of %c in %s is %td.\n", toSearchFor, argv[1], lastOcc-argv[1]); } } return EXIT_SUCCESS; }
Outputs (after having generate an executable named pos
):
$ ./pos AAAAAAA First position of A in AAAAAAA is 0. Last position of A in AAAAAAA is 6. $ ./pos BAbbbbbAccccAAAAzzz First position of A in BAbbbbbAccccAAAAzzz is 1. Last position of A in BAbbbbbAccccAAAAzzz is 15. $ ./pos qwerty A is not in qwerty.
One common use for strrchr
is to extract a file name from a path. For example to extract myfile.txt
from C:\Users\eak\myfile.txt
:
char *getFileName(const char *path) { char *pend; if ((pend = strrchr(path, '\')) != NULL) return pend + 1; return NULL; }
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents