• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

So sánh chuỗi trong VB

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Điều hành viên: tungblt, vuathongtin

r3turn
Bài viết: 8
Ngày tham gia: T.Ba 29/05/2012 10:54 am

So sánh chuỗi trong VB

Gửi bàigửi bởi r3turn » T.Tư 29/08/2012 3:59 pm

Mọi người cho mình hỏi làm sao để so sánh 1 chuỗi kiểu như sau

Dữ liệu

Mã: Chọn hết

@Ngày mai tôi phải đi làm
@Hôm nay là ngày đầu tuần
@Trách nhiệm hữu hạn
@Con đường đời


ví dụ dữ liệu của mình đưa vào là

Mã: Chọn hết

Trách nhiệm với tương lai


nếu thấy khớp với trên 30% thì sẽ xuất ra textbox



Hình đại diện của người dùng
akira
Thành viên danh dự
Thành viên danh dự
Bài viết: 354
Ngày tham gia: T.Bảy 25/10/2008 11:11 pm
Has thanked: 6 time
Been thanked: 69 time

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi akira » T.Tư 29/08/2012 4:31 pm

khớp 30% thì lấy mới ác chứ :))

bạn thử đưa hết chuỗi input vào một mảng (cắt theo khoảng trắng)
muốn lẹ thì sử dụng linq duyệt từng chữ một xem chữ đó có nằm trong chuỗi ko, nếu hơn 30% số chữ trong mảng thỏa thì xuất ra textbox :D

Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi xuanha » T.Tư 29/08/2012 4:37 pm

1. Duyệt từng dòng, lấy len(của chuỗi)*3/100 nếu lẻ thì làm tròn số này
2. Lấy 1 biến i cho chạy từ 1 đến len(xâu nhập vào) từ đi len(của chuỗi)*3/100
Cắt xâu nhập vào từ vị trí i và lấy độ dài là len(của chuỗi)*3/100 nếu lẻ thì làm tròn số này
3. Kiểm tra xâu được cắt này nếu nó nằm trong chuỗi thì in chuỗi đó ra.

Bạn hãy tham khảo đoạn code dưới đây:
  1. Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  2.         Dim x() As String = {"@Ngày mai tôi phải đi làm", "@Hôm nay là ngày đầu tuần", "@Trách nhiệm hữu hạn", "@Con đường đời", "Trách nhiệm với com cjauy"}
  3.         MsgBox(kiemtra(x, "Trách nhiệm với tương lai"))
  4.     End Sub
  5.     Private Function kiemtra(ByVal s() As String, ByVal dulieu As String) As String
  6.         Dim x$ = ""
  7.         Dim i%
  8.         Dim j%
  9.         For i = 0 To UBound(s)
  10.             For j = 1 To Math.Round(dulieu.Length() - s(i).Length * 0.3)
  11.                 If s(i).IndexOf(Mid(dulieu, j, Math.Round(s(i).Length * 0.3)), 1) > 0 Then x = x & s(i) & vbCrLf
  12.             Next
  13.         Next
  14.         kiemtra = x
  15.     End Function
  16.  
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

r3turn
Bài viết: 8
Ngày tham gia: T.Ba 29/05/2012 10:54 am

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi r3turn » T.Tư 29/08/2012 7:33 pm

Cảm ơn bạn.
cho mình hỏi thêm 1 câu nữa nha :)

làm thế nào để so sánh 2 từ và đưa ra nó giống nhau bao nhiêu phần trăm không.

ví dụ như này :

Mã: Chọn hết

http://2cafe.vn/kiemtra.php?v1=Đây là chuỗi 1&v2=Đây là từ cần so sánh


nó sẽ trả về kết quả là 54.16 %

Cảm ơn mọi người :D

Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi xuanha » T.Tư 29/08/2012 8:46 pm

Ai cũng biết 10% của 100 là mười, 40% của 100 là 25. Vậy thì suy ra hai chuỗi giống nhau bao nhiêu % bằng độ dài của đoạn ký tự giống nhau chia cho độ dài chuỗi cần so sánh.
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi dazzlingvit » T.Tư 29/08/2012 11:38 pm

xuanha đã viết:1. Duyệt từng dòng, lấy len(của chuỗi)*3/100 nếu lẻ thì làm tròn số này
2. Lấy 1 biến i cho chạy từ 1 đến len(xâu nhập vào) từ đi len(của chuỗi)*3/100
Cắt xâu nhập vào từ vị trí i và lấy độ dài là len(của chuỗi)*3/100 nếu lẻ thì làm tròn số này
3. Kiểm tra xâu được cắt này nếu nó nằm trong chuỗi thì in chuỗi đó ra.

Cách này không chính xác (tên gọi "mỹ miều" của các giải toán này là thuật toán tham lam - Greedy Algorithm). Bởi vì nếu 2 xâu là: "Luyên thuyên" và "Liên thiên", các ký tự giống và khác nhau nó xen lẫn nhau, vì thế nếu mà cắt từng phần của xâu đem đi so sánh kết quả nó sẽ sai :)
----------------
r3turn đã viết:Cảm ơn bạn.
cho mình hỏi thêm 1 câu nữa nha :)

làm thế nào để so sánh 2 từ và đưa ra nó giống nhau bao nhiêu phần trăm không.

ví dụ như này :

Mã: Chọn hết

http://2cafe.vn/kiemtra.php?v1=Đây là chuỗi 1&v2=Đây là từ cần so sánh


nó sẽ trả về kết quả là 54.16 %

Cảm ơn mọi người :D

Đây là bài toán tìm xâu con chung dài nhất, là bài toán sử dụng thuật toán quy hoạch động (Dynamic Programming) cơ bản mà bạn có thể gặp ở bất cứ cuốn sách thuật toán nào. Tư tưởng thuật toán nó như sau:
- Gọi 2 xâu đó là s1 và s2. Gọi dp[i][j] là độ dài xâu con chung dài nhất của i ký tự đầu của s1 và j ký tự đầu của s2. Dễ thấy các dp[0][j] và dp[i][0] đều bằng 0 (xong bước khởi tạo).
- Quy hoạch động: nếu s1[i] = s2[j] thì thấy ngay xâu con chung dài nhất lúc đó sẽ là xâu con chung dài nhất của s1, s2 bỏ đi phần tử đang xét cộng với 1. Tức là dp[i][j] = dp[i - 1][j - 1] + 1. Ngược lại (s1[i] != s2[j]), dp[i][j] = Max{dp[i - 1][j], dp[i][j - 1]}
- Độ dài xâu con chung dài nhất nó nằm ở dp[n][m] với n là độ dài s1, m là độ dài s2. Muốn tìm chính xác xâu này thì tạo thêm cái mảng truy vết.
Độ phức tạp O(n*m).
Nói chung là kiếm cuốn sách về giải thuật mà đọc, chắc dễ hiểu hơn đống phía trên mình viết :D
Dazzling V.I.T
Hãy gọi tôi là vịt :)

r3turn
Bài viết: 8
Ngày tham gia: T.Ba 29/05/2012 10:54 am

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi r3turn » T.Sáu 31/08/2012 8:25 pm

hi, mình với học nên vẫn còn non và xanh lắm :(. mình tìm mãi mà ko thấy ở đâu cả :(

ai giúp mình với :D

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi dazzlingvit » T.Sáu 31/08/2012 9:19 pm

Lên google gõ "Tìm xâu con chung dài nhất" là ra cả đống.
Dazzling V.I.T
Hãy gọi tôi là vịt :)

Hình đại diện của người dùng
xuanha
Guru
Guru
Bài viết: 1222
Ngày tham gia: T.Năm 19/08/2010 4:25 pm
Đến từ: Ban Tổ chức Thành uỷ Hưng Yên, tỉnh Hưng Yên
Has thanked: 13 time
Been thanked: 380 time
Liên hệ:

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi xuanha » T.Sáu 31/08/2012 9:57 pm

r3turn đã viết:hi, mình với học nên vẫn còn non và xanh lắm :(. mình tìm mãi mà ko thấy ở đâu cả :(

ai giúp mình với :D


So sánh sự giống nhau giữa hai xâu cũng đơn giản thôi, không cần hiểu phức tạp hoá làm gì.
Bạn hãy tham khảo đoạn code dưới đây:
  1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  2.         MsgBox(giongnhau("Nguyễn Hà Xuân Hà", "Nguyễn Hà Anh Hà"))
  3. End Sub
  4. Private Function giongnhau(ByVal xau1$, ByVal xau2$) As String
  5.         Dim x1() As String = xau1.Split(" ")
  6.         Dim x2() As String = xau2.Split(" ")
  7.         Dim x$ = ""
  8.         Dim i% = -1
  9.         Dim j As Integer
  10.         Do : i = i + 1
  11.             For j = 0 To UBound(x1)
  12.                 If x2(i) = x1(j) Then
  13.                     x = x & x2(i) & " "
  14.                     x1(j) = ""
  15.                 End If
  16.             Next
  17.         Loop Until i = UBound(x2)
  18.         Dim t() As String = x.Trim.Split(" ")
  19.         giongnhau = "Các từ của xâu 1 (" & xau1 & ") có trong xâu 2 (" & xau2 & ") là '" & x.Trim() & Chr(10) &"Như vậy xâu 1 giống xâu 2 là " & ((UBound(t) + 1) / (UBound(x2) + 1)) * 100 & "%."
  20.     End Function
  21.  
Tập tin đính kèm
Ketqua.PNG
Ketqua.PNG (10.77 KiB) Đã xem 2577 lần
Kiểm phiếu Đại hội Đoàn, Đại hội Đảng
http://caulacbovb.com/forum/viewtopic.php?t=23599

Hình đại diện của người dùng
NTN
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 472
Ngày tham gia: T.Tư 05/02/2014 3:43 pm
Đến từ: Cao Lãnh, Đồng Tháp,Việt Nam
Has thanked: 19 time
Been thanked: 7 time
Liên hệ:

Re: So sánh chuỗi trong VB

Gửi bàigửi bởi NTN » T.Sáu 15/09/2017 12:27 pm

Chú ơi em có text1 là "asd fsadf asdasdwd" và text2 là "c" thì nó so sánh ra 100% là sao chú???
Em ví dụ thêm msgbox(giongnhau("con","gà")) nó hoàn toàn không giống nhau sau vẫn trả kết quả là 100% ạ?
Dongthapseo.com - Luutru360.com - Tình yêu của tôi <3


Quay về “Visual Basic .NET và C# (VB.NET & C#)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách