伊莉討論區
標題:
字串刪除問題
[打印本頁]
作者:
dede88954
時間:
2015-1-12 12:27 AM
標題:
字串刪除問題
本帖最後由 snowflying 於 2015-1-12 01:54 AM 編輯
題目是這樣: s1 , s2 均是字串 , 將s1中所有出現於s2之字符均刪除.
我是新手, 請高手能幫我看一下哪裡要改嗎...
#include <stdio.h>
#include <stdlib.h>
void squeez(char s1[],char s2[])
{
int i,j,k=0;
for(i=0;s1[i]!='\0';i++)
{
for(j=0;s2[j]!='\0';j++)
{
if(s1[i]!=s2[j])
{
s1[k++]=s1[i];
}
}
}
s1[k]='\0';
print f("%s ",s1);
}
int main(int argc, char** argv)
{
int i;
char a[100]="abcdefe",b[100]="fedcba";
squeez(a,b);
return 0;
}
複製代碼
作者:
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 個重複值了
而且結果也不正確
底下參考看看,並比較一下與原先的差異
for(j=0;s2[j]!='\0';j++)
{
if(s1[i]==s2[j])
{
break;
}
}
if(s2[j] == '\0')
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!