Try strcspn:
Get span until character in string
Scans str1 for the first occurrence of any of the characters that are part of str2, returning the number of characters of str1 read before this first occurrence.
The search includes the terminating null-characters. Therefore, the function will return the length of str1 if none of the characters of str2 are found in str1.
Example:
#include <stdio.h>
#include <string.h>
const char* findany(const char* s, const char* keys)
{
const char* tmp;
tmp = s + strcspn(s,keys);
return *tmp == '\0' ? NULL : tmp;
}
int main ()
{
char str1[] = "abc\\123";
char str2[] = "abc/123";
char str3[] = "abc123";
char keys[] = "/\\";
printf("1: %s\n",findany(str1,keys));
printf("2: %s\n",findany(str2,keys));
printf("3: %s\n",findany(str3,keys));
return 0;
}
Edit: strpbrk
does the same thing as findany
above. Didn't see that function:
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[] = "abc\\123";
char str2[] = "abc/123";
char str3[] = "abc123";
char keys[] = "/\\";
printf("1: %s\n",strpbrk(str1,keys));
printf("2: %s\n",strpbrk(str2,keys));
printf("3: %s\n",strpbrk(str3,keys));
return 0;
}
Output (of both):
1: \123
2: /123
3: (null)