通过一堆线程去后,我知道我需要使用regex.h使用在C&C++的正则表达式.
但我想知道,是否有更简单的方法来搜索字符串中"/"或"\"的出现.
// I have a strstr statement like this -
str = strstr(s, "/");
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以更改它,以便我可以搜索第一次出现
/ 或 \在一次调用strstr.
试试strcspn:
获取span直到字符串中的字符
扫描str1中第一次出现的任何字符是str2的一部分,返回在第一次出现之前读取的str1的字符数.搜索包括终止空字符.因此,如果str1中没有找到str2的字符,则该函数将返回str1的长度.
例:
#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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:strpbrk做与findany上面相同的事情.没看到那个功能:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出(两者):
1: \123
2: /123
3: (null)
Run Code Online (Sandbox Code Playgroud)