伊莉討論區

標題: 字串刪除問題 [打印本頁]

作者: dede88954    時間: 2015-1-12 12:27 AM     標題: 字串刪除問題

本帖最後由 snowflying 於 2015-1-12 01:54 AM 編輯

題目是這樣: s1 , s2 均是字串 ,  將s1中所有出現於s2之字符均刪除.我是新手, 請高手能幫我看一下哪裡要改嗎...
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. void squeez(char s1[],char s2[])
  4. {
  5.      int i,j,k=0;
  6.      for(i=0;s1[i]!='\0';i++)
  7.      {
  8.          for(j=0;s2[j]!='\0';j++)
  9.          {
  10.              if(s1[i]!=s2[j])
  11.              {
  12.                  s1[k++]=s1[i];
  13.              }
  14.          }
  15.      }
  16.      s1[k]='\0';
  17.      print f("%s ",s1);
  18. }
  19. int main(int argc, char** argv)
  20. {
  21.      int i;
  22.      char a[100]="abcdefe",b[100]="fedcba";
  23.      squeez(a,b);
  24.      return 0;
  25. }
複製代碼

作者: snowflying    時間: 2015-1-12 02:04 AM

應該是判斷 s2 裡面的所有字元都不相符,才給值

if(s1[ i ] != s2[ j ])
{
    s1[k++] = s1[ i ];
}

這會造成每次去跟 s2[j] 比時,不相同就執行 s1[k++] = s1[ i ];
造成許多重複值,更慘的情況下,會造成無窮迴圈,與 buffer overflow

舉個例子 :
a[100] = "abc12de34f" , b[100] = "abcdef"

a[0] 與 b[0] 比較,相同,繼續比較下一個
a[0] 與 b[1] 比較,不同,a[0] = 'a';
a[0] 與 b[2] 比較,不同,a[1] = 'a';
a[0] 與 b[3] 比較,不同,a[2] = 'a';
a[0] 與 b[4] 比較,不同,a[3] = 'a';
a[0] 與 b[5] 比較,不同,a[4] = 'a';

光比較第一個值,就已經產生 5 個重複值了
而且結果也不正確

底下參考看看,並比較一下與原先的差異
  1. for(j=0;s2[j]!='\0';j++)
  2. {
  3.     if(s1[i]==s2[j])
  4.     {
  5.         break;
  6.     }
  7. }

  8. if(s2[j] == '\0')
  9.     s1[k++] = s1[i];
複製代碼

作者: dede88954    時間: 2015-1-12 07:17 AM

snowflying 發表於 2015-1-12 02:04 AM
應該是判斷 s2 裡面的所有字元都不相符,才給值

if(s1[ i ] != s2[ j ])

原來如此,讓我又多學了一課,感恩指教




歡迎光臨 伊莉討論區 (http://a401.file-static.com/) Powered by Discuz!