2012-05-18 29 views
3

我想檢查一個字符是否在C字符串中。該字符是在Linux中用於管道的'|' (實際上,我也想檢查'<','>','>>','&')。如何檢查C字符串中是否存在單個字符?

在Java中我可以這樣做:

String.indexOf() 

但我怎麼能做到這一點在C,而不需要通過整個字符串(char*字符串)循環?

+0

'「|」'是ac字符串,任何用雙引號引起來的字符'','''是一個字符串,不管它的字符數是多少。你的Q標題有誤導性或者我誤解你的Q. –

+0

@Als:正確,固定。謝謝 ! – ron

+2

請注意,'>> >>'不是單個字符。這裏你需要一個不同的方法('strstr')。 –

回答

11

如果你需要搜索一個字符,你可以使用strchr功能,像這樣:

char* pPosition = strchr(pText, '|'); 

pPositionNULL如果給定的角色一直沒有找到。例如:

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"); 
3

strchr是你的朋友。

char *strchr(const char *s, int c); 

strchr的定位功能的c在 串的第一次出現(轉換爲char)通過s指向。

strchr函數返回指向所查找字符的指針,或者如果字符串中未出現 字符,則返回空指針。

當然,函數必須在最糟糕的情況下遍歷整個字符串(如Java函數所做的那樣)。

+0

在常量strchr中,c應該是char類型。我認爲你錯誤地鍵入了int。它應該是:char * strchr(const char * s,char c); – Vibhuti

+0

@Vibhuti:不,它不應該。請檢查我的答案中的鏈接,或者 - 如果您不信任它 - ISO C標準,http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf,第330頁。 –

相關問題