使用strpbrk
功能來尋找幾個大字任何一個的一次首次出現。你不能跳過轉義字符;你必須檢查它是否跟着你真正想要的角色。
I.e.假設我們想要尋找"
,可以將其轉義爲\"
。其實,這意味着我們必須尋找"
或\
。換句話說:
char *ptr = strpbrk(string, "\"\\"); /* look for chars in the set { ", \ } */
但是,我們不得不這樣做在一個循環中,因爲我們是在轉義引號不感興趣,一直走下去:
char *quote = 0;
char *string = str; /* initially points to the str array */
while (*string != 0) {
char *ptr = strpbrk(string, "\"\\");
接下來我們檢查是否發現了一些:
if (!ptr)
break;
如果我們發現某事必然是一個\
或"
:
if (*ptr == '"') {
quote = ptr;
break;
}
如果它不是一個引號,那麼它一定是一個轉義。我們增加到下一個角色。如果它是一個終止空值,那意味着我們在一個字符串的末尾有一個反斜槓:一個不正確的轉義。
if (*++ptr == 0)
break;
否則,我們可以跳過下一個字符並繼續循環掃描下一個轉義或未轉義的引用。
string = ++ptr;
}
如果發生轉義報價,然後quote
指向它while循環執行後。否則quote
保持爲空。
此代碼假設除\"
之外還存在其他轉義,但它們都是一個字符長,例如, \b
或\r
。如果有更長的轉義,如\xff
,它將不起作用。轉義構成語言的慣例:您必須知道您正在處理的語言是否正確。
來源
2012-04-15 05:38:34
Kaz
任何機會,這不會發生作業,它是必需的'strchr'必須使用? – Kaz 2012-04-15 05:56:25
@Kaz:謝謝!不,我只是認爲'strchr'會在大字符串中表現更好。 – Kayla 2012-04-15 06:15:26