經歷了一堆線程後,我知道我需要使用regex.h在C++中使用正則表達式。如何找到第一次出現的幾個字符之一(除了使用正則表達式)
但我想知道,是否有更簡單的方法來搜索字符串中「/」或「\」的出現。
// I have a strstr statement like this -
str = strstr(s, "/");
我想知道是否有可能改變它,這樣我可以在一個單一的呼叫搜索的strstr爲 /
或\
的第一次出現。
經歷了一堆線程後,我知道我需要使用regex.h在C++中使用正則表達式。如何找到第一次出現的幾個字符之一(除了使用正則表達式)
但我想知道,是否有更簡單的方法來搜索字符串中「/」或「\」的出現。
// I have a strstr statement like this -
str = strstr(s, "/");
我想知道是否有可能改變它,這樣我可以在一個單一的呼叫搜索的strstr爲 /
或\
的第一次出現。
嘗試strcspn:
獲取跨度直到字符的字符串
掃描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;
}
編輯: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;
}
輸出(兩者):
1: \123
2: /123
3: (null)
你可以嘗試使用strchr函數找到一個字符中第一次出現:
pos_of_first_slash=strchr(s, '/');
返回指向字符在C字符串str中第一次出現。
終止空字符被認爲是C字符串的一部分。因此,它也可以被定位以檢索指向字符串結尾的指針。
返回一個指向str中第一次出現的字符的指針。如果找不到該字符,則該函數返回一個空指針。
我想知道是否有可能改變它,這樣我可以爲「第一次出現搜索 /」或‘在一個單一的呼叫\’來的strstr
可以使用strtok
,其修改源的字符串(或見strtok_r
)。或者你可以使用strcspn
:
The strcspn() function shall compute the length (in bytes) of the maximum
initial segment of the string pointed to by s1 which consists entirely
of bytes not from the string pointed to by s2.
所以
p = s + strcspn(s, "/\\");
將返回一個指向要麼/,\,或者到最後NUL字符(如果沒有\也不//被發現)。
當然,您也可以運行兩次strchr
並查看哪一個(如果不是NULL)是第一個。
有,不只是一個C函數 - strpbrk()
雖然它不完全用於這一目的,你可以使用'strtok_r'找到指定的一組角色的其中之一的第一次出現。 –