ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4105|ตอบกลับ: 1

[VB.NET] การตรวจสอบคำ ประโยค วลีพาลินโดรม (Palindrome) ด้วย VB.NET

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583




พาลินโดรม (Palindrome) คือคำ วลี จำนวน หรือลำดับที่สามารถอ่านจากหลังไปหน้าหรือหน้าไปหลังแล้วมีความหมายเหมือนกัน เช่น ยาย, นาน, กนก, นอน, รรรรรร (ระ รัน รอน), radar, madam หรือจำนวนตัวเลข เช่น 919 818 ... สำหรับโค้ดชุดนี้แอดมินได้เขียนให้เป็นตัวอย่างอยู่ 3 ชุด ประกอบไปด้วย ...

1. การใช้คำสั่งภายใน หรือฟังค์ชั่นที่ติดมาในตัวแปลภาษาในการเปรียบเทียบ

2. ใช้การทำซ้ำด้วย WHILE โดยทำการเปรียบเทียบจากตัวแรก กับตัวสุดท้าย จากนั้นก็เพิ่มค่าตำแหน่งชุดตัวอักษรต้นฉบับ และลดค่าตำแหน่งในส่วนที่นำมาเปรียบเทียบ เช่น radar โดยเอา r ตัวแรกกับตัวสุดท้ายมาเปรียบเทียบ จากนั้นก็เอาตัว a ตัวที่ 2 (เพิ่มตำแหน่ง) กับ a ตัวที่ 4 (ลดตำแหน่ง) มาเปรียบเทียบกัน
3. ใช้ลูป FOR โดยที่หารความยาวออกเป็น 2 ส่วน แล้วทำการเปรียบเทียบกัน เช่น ยาย โดยเอาตัวแรกและตัวสุดท้ายมาเปรียบเทียบกัน


อนึ่ง ... คุณต้องทำการ Debugger ทีละสเต็ป จึงจะเข้าใจกระบวนการขั้นตอนได้ชัดเจนขึ้นครับ


มาดูโค้ดกันเถอะ ...
  1. Public Class frmPalindrome

  2.     '// Use build in function.
  3.     Private Function CheckPalindrome(ByVal strText As String) As Boolean
  4.         Dim str As String
  5.         '// Reverse characters and convert to Upper Case.
  6.         str = StrReverse(UCase(strText))
  7.         '// Compare Original VS Reverse.
  8.         If str.Equals(UCase(strText)) Then
  9.             Return True
  10.         Else
  11.             Return False
  12.         End If
  13.     End Function

  14.     '// Make own function with WHILE.
  15.     Private Function CheckPalindromeWhile(ByVal strText As String) As Boolean
  16.         Dim iCurr As Integer = 0
  17.         Dim iLength As Integer = strText.Length - 1
  18.         strText = UCase(strText)
  19.         '// Repetitive with WHILE.
  20.         While iCurr < iLength
  21.             '// Compare from front to back, then increase the position and decrease the position.
  22.             If strText(iCurr) <> strText(iLength) Then Return False
  23.             '//
  24.             iCurr += 1
  25.             iLength -= 1
  26.         End While
  27.         Return True
  28.     End Function

  29.     '// Make own function with FOR.
  30.     Private Function CheckPalindromeFor(ByVal strText As String) As Boolean
  31.         CheckPalindromeFor = True
  32.         strText = UCase(strText)
  33.         '// Separate words into two parts.
  34.         For i As Integer = 0 To strText.Length \ 2
  35.             '// Divided into two parts and compare.
  36.             If strText(i) <> strText(strText.Length - i - 1) Then Return False
  37.         Next
  38.     End Function

  39.     Private Sub frmPalindrome_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  40.         Label2.Text = ""
  41.         txtWord.Text = "Sator Arepo Tenet Opera Rotas" '"radar"
  42.     End Sub

  43.     Private Sub btnClear_Click(sender As System.Object, e As System.EventArgs) Handles btnClear.Click
  44.         txtWord.Text = ""
  45.         txtWord.Focus()
  46.     End Sub

  47.     Private Sub btnCheck_Click(sender As System.Object, e As System.EventArgs) Handles btnCheck.Click
  48.         If Trim(txtWord.TextLength) = 0 Or txtWord.Text.Trim = "" Then Return
  49.         '// 3 Methods.
  50.         If CheckPalindrome(txtWord.Text) Then
  51.             'If CheckPalindromeWhile(txtWord.Text) Then
  52.             'If CheckPalindromeFor(txtWord.Text) Then
  53.             Label2.Text = txtWord.Text + " is a Palindrome."
  54.         Else
  55.             Label2.Text = txtWord.Text + " is not a Palindrome."
  56.         End If
  57.         txtWord.Focus()
  58.     End Sub

  59. End Class
คัดลอกไปที่คลิปบอร์ด



ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

58

โพสต์

140

เครดิต

Member

Rank: 2

เครดิต
140
โพสต์ 2022-10-25 15:37:01 | ดูโพสต์ทั้งหมด

ขอบคุณครับ
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 23:58 , Processed in 0.154016 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้