我想檢查一個字符是否在C字符串中。該字符是在Linux中用於管道的'|'
(實際上,我也想檢查'<'
,'>'
,'>>'
,'&'
)。如何檢查C字符串中是否存在單個字符?
在Java中我可以這樣做:
String.indexOf()
但我怎麼能做到這一點在C,而不需要通過整個字符串(char*
字符串)循環?
我想檢查一個字符是否在C字符串中。該字符是在Linux中用於管道的'|'
(實際上,我也想檢查'<'
,'>'
,'>>'
,'&'
)。如何檢查C字符串中是否存在單個字符?
在Java中我可以這樣做:
String.indexOf()
但我怎麼能做到這一點在C,而不需要通過整個字符串(char*
字符串)循環?
如果你需要搜索一個字符,你可以使用strchr
功能,像這樣:
char* pPosition = strchr(pText, '|');
pPosition
將NULL
如果給定的角色一直沒有找到。例如:
puts(strchr("field1|field2", '|'));
將輸出:「| field2」。請注意,strchr
將執行轉發搜索,以搜索落後您可以使用strrchr
。現在想象一下(舉個例子),你有一個像這樣的字符串:「variable:value | condition」。您可以提取值領域:
char* pValue = strrchr(strchr(pExpression, '|'), ':') + 1;
如果你想要的是裏面的字符串的字符的指數看看到this post這裏SO。您可能還需要類似IndexOfAny()
之類的東西,here SO上的另一個帖子使用strnspn
。
相反,如果你正在尋找一個字符串,你可以使用strstr
功能,像這樣:
char* pPosition = strstr(pText, "text to find");
strchr
是你的朋友。
char *strchr(const char *s, int c);
strchr
的定位功能的c
在 串的第一次出現(轉換爲char
)通過s
指向。
strchr
函數返回指向所查找字符的指針,或者如果字符串中未出現 字符,則返回空指針。
當然,函數必須在最糟糕的情況下遍歷整個字符串(如Java函數所做的那樣)。
在常量strchr中,c應該是char類型。我認爲你錯誤地鍵入了int。它應該是:char * strchr(const char * s,char c); – Vibhuti
@Vibhuti:不,它不應該。請檢查我的答案中的鏈接,或者 - 如果您不信任它 - ISO C標準,http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf,第330頁。 –
'「|」'是ac字符串,任何用雙引號引起來的字符'','''是一個字符串,不管它的字符數是多少。你的Q標題有誤導性或者我誤解你的Q. –
@Als:正確,固定。謝謝 ! – ron
請注意,'>> >>'不是單個字符。這裏你需要一個不同的方法('strstr')。 –