這是我的代碼,用於查找用戶在給定字符串中輸入的子字符串。在字符串中查找子字符串
bool find_str(char *str, char const *substr) {
while(*str) {
if(*str++ == *substr) {
char const *a = substr;
while((*str++ == *++a)); /*empty*/
if(*a == '\0')
return true;
}
}
return false;
}
// If match found, then return true, else false
int main(void) {
printf("%d", find_str("ABCDEF", "CDE")); /* Return true in this case */
printf("%d", find_str("ABCDE", "CDE")); /* Return false in this case */
}
正如註釋中所述,只要以附加字符結尾,就會返回true。如果不是,則返回false。我認爲增量/減量運算符存在問題。但我怎麼找不到?
* str ++,* ++ a,讓我想到了試圖記住運算符優先級的難題。我不喜歡記憶的事情。請註釋它或添加一些括號()。 – John3136 2013-05-13 02:06:20
在這裏它是如何工作的,首先它比較A和C,然後用B和C直到C == C,所以在嵌套的同時它會增加一個副作用使得D == D和E == E。(* + +第一個指向D,而* str ++也指向D,但在之後遞增) – 2013-05-13 02:07:38
這不是代碼評論網站。無論如何,'strstr'這樣做 - 10秒google-foo,你可以找到實現,例如http://www.opensource.apple.com/source/xnu/xnu-792.13.8/libsa/strstr.c。在你的代碼中,有一些錯誤:爲了學習找到它們,我建議把類似'printf('''%s'=?='%s'\ n「,str,a)比較...你很快就會看到你真正的比較和意識到什麼是錯誤的,然後你可以推理和試驗來解決它。提示:正如蘋果所做的那樣,保持這種「匹配」的邏輯與「隨處查看」分開:「strncmp」。 – 2013-05-13 02:17:16