從 str[] 長字串裡 找 substr[] 目標字串,短字串 出現的個數。
for(i = 0;str[i];i++) // 依次從 第 i 個位置 開始 找。
for(j=i,k=0;substr[k]==str[j];k++,j++)
// j 是 str 裡的字元位置,j=i+0,i+1,i+2 ....
// k 是 substr 裡的字元位置, k=0,1,2,...
這句 j 迴圈 是 從 j=i+0 開始找起,只要 substr[k]==str[j] 就往下比較,
迴圈體 if(substr[k+1]=="\0"){ break; }
如果substr[] 裡,下一個字元 是 字串結束符,表示 目標字串已迴圈找到尾巴了,也就是 找到了。於是 break -- 結束本次 迴圈。結束前 num++ 就是統計 直到目前為止,一共找到了 幾個 目標字串。
-------
你可以用
char str[]="abc123abc"; char substr[]="abc";
去呼叫, 新增一些中間列印,看看是如何迴圈和比較的。
從 str[] 長字串裡 找 substr[] 目標字串,短字串 出現的個數。
for(i = 0;str[i];i++) // 依次從 第 i 個位置 開始 找。
for(j=i,k=0;substr[k]==str[j];k++,j++)
// j 是 str 裡的字元位置,j=i+0,i+1,i+2 ....
// k 是 substr 裡的字元位置, k=0,1,2,...
這句 j 迴圈 是 從 j=i+0 開始找起,只要 substr[k]==str[j] 就往下比較,
迴圈體 if(substr[k+1]=="\0"){ break; }
如果substr[] 裡,下一個字元 是 字串結束符,表示 目標字串已迴圈找到尾巴了,也就是 找到了。於是 break -- 結束本次 迴圈。結束前 num++ 就是統計 直到目前為止,一共找到了 幾個 目標字串。
-------
你可以用
char str[]="abc123abc"; char substr[]="abc";
去呼叫, 新增一些中間列印,看看是如何迴圈和比較的。