As a general purpose string library rapidstring
looks promising. It emulates the ease of std::string for C while being a lot faster at it. But it doesn't have contains/split etc (doesn't need to).
As to C not having contains/split, that is not necessarily true, it is just that the standard library of C doesn't have the most user friendly interface. You should look into the standard header string.h and its use case.
"Find" is strstr
"Find a single char" is strchr
"Find any of" is strpbrk
"Find first not of" is kindof strspn
, like this
str + strspn(str, " \t\v\f\r\n")
It would skip all whitespace.
"Contains" is just checking
strstr(haystack, needle) != NULL
Split is strtok
. Not the best api for splitting, but it works. You can implement splitting easily with strspn/strpbrk too.
What the C libraries don't have is a way to reverse search most of the time. Like a way to find the last occurence of X in a str. The reason probably is, that there is no straightforward interface for such a function, since you would have to pass the length of the string into the function.