Reputation: 21865
I want to check if a single char is in a C string. The character is the '|'
used for pipelines in Linux (Actually, I also want to check for '<'
, '>'
, '>>'
, '&'
).
In Java I can do this:
String.indexOf()
But how can I do this in C, without looping through the whole string (a char*
string)?
Upvotes: 23
Views: 81851
Reputation: 15954
strchr
is your friend.
char *strchr(const char *s, int c);
The
strchr
function locates the first occurrence ofc
(converted to achar
) in the string pointed to bys
.The
strchr
function returns a pointer to the located character, or a null pointer if the character does not occur in the string.
And of course, the function has to walk through the whole string in the worst case (as the Java function probably does).
Upvotes: 6
Reputation: 67090
If you need to search for a character you can use the strchr
function, like this:
char* pPosition = strchr(pText, '|');
pPosition
will be NULL
if the given character has not been found. For example:
puts(strchr("field1|field2", '|'));
Will output: "|field2". Note that strchr
will perform a forward search, to search backward you can use the strrchr
. Now imagine (just to provide an example) that you have a string like this: "variable:value|condition". You can extract the value field with:
char* pValue = strrchr(strchr(pExpression, '|'), ':') + 1;
If what you want is the index of the character inside the string take a look to this post here on SO. You may need something like IndexOfAny()
too, here another post on SO that uses strnspn
for this.
Instead if you're looking for a string you can use the strstr
function, like this:
char* pPosition = strstr(pText, "text to find");
Upvotes: 30