[問題] 刪除重複字串

看板C_and_CPP (C/C++)作者 (just feeling￾ )時間15年前 (2010/08/10 21:20), 編輯推噓4(4011)
留言15則, 8人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 有任意兩個字串結合,若兩字串皆有重覆的字元都會被刪除掉 例如:有一個字串為"abcd",另一個字串為"bde", 兩字串結合會產生出"ace", 目前我的想法為把兩字串先結合起來成為"abcdbde", 再用此字串"abcdbde"每一個字元去比對同字串的其他字元是否有相同, 沒有相同的字元再存入一個buffer裡。 但是程式跑出來的結果卻為"acbe" 想請教板上的高手,程式該如何修正, 或是否有更好的判斷方法,小弟我想了一天都還是無法解決@@ 謝謝,有問題的程式如下 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Microsoft Visual Studio 2005 有問題的code: (請善用置底文標色功能) #include <stdio.h> #include <stdlib.h> void main(void) { unsigned char *str="abcd"; unsigned char *str1="bde"; int i=0,j=0,a,b,k=0,g,w=0; int t=1,f=0; int flag=0; unsigned char *buffer; while(*(str+i)) { i++; } while(*(str1+j)) { j++; } buffer=(unsigned char *)malloc((i+j+1)*sizeof(unsigned char)); for(k=0;k<i;k++) { buffer[k]=*(str+k); } for(g=k;g<i+j;g++) { buffer[g]=*(str1++); } for(b=0;b<i+j;b++) { for(a=0;a<i+j;a++) { if(a==b) continue; if(buffer[a]==buffer[b]) { flag = 1; break; } else { flag = 0; } } if(flag==0) { buffer[w++]=buffer[b]; } } buffer[w++]='\0'; printf("%s\r\n",buffer); free(buffer); system("pause"); return; } 補充說明: 我知道是判斷是否為重複字元那邊的for迴圈有問題, 但依然想不通該如何修正,麻煩高手指導一下,謝謝。 -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.214.27

08/10 21:23, , 1F
開一個size 26的陣列,統計出現的a, b, c, d,
08/10 21:23, 1F

08/10 21:23, , 2F
只輸出值為1的字母。超過1的就表示重複。
08/10 21:23, 2F

08/10 21:24, , 3F
範例兩字串來說,a(1), b(2), c(1), d(2), e(1)。
08/10 21:24, 3F

08/10 21:25, , 4F
"ABCD"+"BCDA" = "ABCDA"
08/10 21:25, 4F

08/10 21:25, , 5F
沒事 我看錯了
08/10 21:25, 5F

08/10 21:41, , 6F
你可以把他append起來當陣列然後search 0.0
08/10 21:41, 6F

08/10 21:55, , 7F
c++嗎? 用map<char> 放入前先確是否重複 不然就counting
08/10 21:55, 7F

08/10 21:57, , 8F
int a[26]; ans.a = abs(s1.a - s2.a); 定義 oprator -
08/10 21:57, 8F

08/10 21:58, , 9F
是each element s1.a[i] - s2.a[i]
08/10 21:58, 9F

08/10 22:01, , 10F
不是c++,是c耶,不過還是謝謝Y大的講解
08/10 22:01, 10F

08/10 22:46, , 11F
我一開始直接想成LCS 然後再把原字串扣掉有出現的 果然這
08/10 22:46, 11F

08/10 22:46, , 12F
方法很慢又很不適當 XD
08/10 22:46, 12F

08/11 11:41, , 13F
有排序的話也可以兩邊取min和已存的buffer最後一個比
08/11 11:41, 13F

08/11 14:01, , 14F
08/11 14:01, 14F

08/11 20:51, , 15F
謝謝各位的講解 我自己也有解出來了^^
08/11 20:51, 15F
文章代碼(AID): #1COL8RrE (C_and_CPP)
文章代碼(AID): #1COL8RrE (C_and_CPP)