Alexman113 (Thành viên)
Đã biết code đệ quy
Bài viết: 12
|
Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
Viết chương trình nhập vào hai xâu S1, S2. Hãy xóa hết tất cả những xâu S1 trong xâu S2 rồi xuất ra màn hình.
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
bạn dùng đoạn code này để xóa xâu rùi in ra màn hình
Code: | while pos(s1,s2)>0 do
delete(s2,pos(s1,s2),length(s1));
|
btw, bài này bạn hỏi xóa kí tự trùng hay xóa xâu trùng vậy :-/
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
yugi139 viết:
QUOTE: bạn dùng đoạn code này để xóa xâu rùi in ra màn hình :)
Code: | while pos(s1,s2)>0 do
delete(s2,pos(s1,s2),length(s1));
|
Theo mình nghĩ đề này ý là xâu s1 vốn nằm trong s2. nếu làm theo cách của bạn thì có thể làm cho kết quả sai. ví dụ, s1 là abc, s2 là aabcbc, z trong s2 chỉ có 1 xâu s1, nhưng chạy đoạn ct trên thì sẽ xóa hết luôn. 
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
khanh duy sau rom viết:
QUOTE: yugi139 viết:
QUOTE: bạn dùng đoạn code này để xóa xâu rùi in ra màn hình :)
Code: | while pos(s1,s2)>0 do
delete(s2,pos(s1,s2),length(s1));
|
Theo mình nghĩ đề này ý là xâu s1 vốn nằm trong s2. nếu làm theo cách của bạn thì có thể làm cho kết quả sai. ví dụ, s1 là abc, s2 là aabcbc, z trong s2 chỉ có 1 xâu s1, nhưng chạy đoạn ct trên thì sẽ xóa hết luôn. :|
thế nên mình mới hỏi lại đề 
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
Alexman113 (Thành viên)
Đã biết code đệ quy
Bài viết: 12
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
Dạ đề là như anh duy_sau_rom+2 nói ạ.
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
Mình nghĩ là test này làm như vậy vẫn đúng chứ nhỉ ^^
Đầu tiên pos(s1, s2)= 2;
Ta delete(s2, 2, 3) thì s2 sẽ bị xóa đi 3 kí tự và trở thành abc
khi đó pos(s1, s2)= 1
Và tiếp theo ta xóa hết.
Chạy chương trình test đó vẫn đúng mà
Mình nghĩ vấn đề chỉ là giới hạn xâu là bao nhiêu thôi. Tại lệnh delete mất O(n) cơ
Nếu n= 1000 thì làm thế này ok (n= độ dài xâu)
khanh duy sau rom viết:
QUOTE: yugi139 viết:
QUOTE: bạn dùng đoạn code này để xóa xâu rùi in ra màn hình :)
Code: | while pos(s1,s2)>0 do
delete(s2,pos(s1,s2),length(s1));
|
Theo mình nghĩ đề này ý là xâu s1 vốn nằm trong s2. nếu làm theo cách của bạn thì có thể làm cho kết quả sai. ví dụ, s1 là abc, s2 là aabcbc, z trong s2 chỉ có 1 xâu s1, nhưng chạy đoạn ct trên thì sẽ xóa hết luôn. :|
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
Nhưng tớ nghĩ test đó chỉ ra được là abc thôi, không phải là xâu rỗng. Vì abc này vốn không ở gần nhau, chỉ mới bị kéo lại gần nhau sau khi xóa xâu thôi.
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
ukm.. C thử viết chương trình ra xem
khanh duy sau rom viết:
QUOTE: Nhưng tớ nghĩ test đó chỉ ra được là abc thôi, không phải là xâu rỗng. Vì abc này vốn không ở gần nhau, chỉ mới bị kéo lại gần nhau sau khi xóa xâu thôi.
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|
Trả lời: Bài toán về xóa kí tự trùng trong xâu. 8 năm, 2 tháng trước
|
(+0)
|
Code: | var s1,s2,s:string;
begin
readln(s1);
readln(s2);
while pos(s1,s2)>0 do
begin
s:=s+copy(s2,1,pos(s1,s2)-1);
delete(s2,1,pos(s1,s2)+length(s1)-1);
end;
s:=s+s2;
writeln(s);
readln;
end.
|
tớ nghĩ có thể viết z, xóa chừng nào không còn nữa thì thôi. nhưng mà chắc chỉ chạy được với xâu nhỏ thôi.
|
|
|
Đã lưu IP
|
|
Đã khóa chức năng gửi bài. |
|