Differenze tra le versioni di "Confrontare i caratteri di due stringhe"

Da Gambas-it.org - Wikipedia.
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
 
Il caso è quello in cui, avendo due stringhe di eguale lunghezza di caratteri, vogliamo verificare quali e quanti caratteri sono eventualmente diversi all'interno delle predette stringhe.
 
Il caso è quello in cui, avendo due stringhe di eguale lunghezza di caratteri, vogliamo verificare quali e quanti caratteri sono eventualmente diversi all'interno delle predette stringhe.
  
Potremo procedere utilizzando la funzione ''Mid(...)'', e l'intento sarà quello di
+
Potremo procedere utilizzando la funzione nativa "Mid()":
  '''Public''' Sub Button1_Click()
+
Public Sub Main()
 +
 
 +
  Dim s1, s2, sp, diversi As String
 +
  Dim i, c As Integer
 +
 
 +
  s1 = "abcd efghi lmno"
 +
  s2 = "abcr pqghillmno"
 +
 
 +
  For i = 1 To Max(Len(s1), Len(s2))
 +
<FONT Color=gray>' ''Se i rispettivi caratteri in posizione j all'interno delle due stringhe non corrispondono fra loro...''</font>
 +
    If Mid(s1, i, 1) <> Mid(s2, i, 1) Then
 +
<FONT Color=gray>' ''...allora viene incrementata la variabile "c" per determinare il totale dei caratteri differenti...''</font>
 +
      Inc c
 +
  <FONT Color=gray>' ''...nonché vengono aggiunti alla variabile, chiamata "diversi", affinché siano mostrati accoppiati in console:''</font>
 +
      sp = Mid(s1, i, 1)
 +
      If IsNull(sp) Then sp = Chr(32)
 +
      diversi &= "\n" & sp & " | " & Mid(s2, i, 1)
 +
    Endif
 +
  Next
 +
 
 +
  Print "I caratteri diversi della stringa \"s1\" e della stringa \"s2\" sono:\n\ns1  s2\n------\n"; diversi
 +
  Print "\nper un totale di "; c & " caratteri."
 +
 
 +
End
 +
oppure si potranno usare le due variabili stringa, confrontando i loro indici:
 +
Public Sub Main()
 +
 
 +
  Dim s1, s2, sp, diversi As String
 +
  Dim i, c As Integer
 +
 
 +
  s1 = "abcd efghi lmno"
 +
  s2 = "abcr pqghillmno"
 
   
 
   
   Dim s1, s2, diversi As String
+
   For i = 1 To Max(Len(s1), Len(s2)) - 1
   Dim j, a As Byte
+
    If s1[i, 1] <> s2[i, 1] Then
 +
      Inc c
 +
      sp = s1[i, 1]
 +
      If IsNull(sp) Then sp = Chr(32)
 +
      diversi &= "\n" & sp & " | " & s2[i, 1]
 +
    Endif
 +
   Next
 
   
 
   
  s1 = "abc0101"
+
   Print "I caratteri diversi della stringa \"s1\" e della stringa \"s2\" sono:\n\ns1  s2\n------\n"; diversi
  s2 = "abd0111"
+
  Print "\nper un totale di "; c & " caratteri."
+
 
  For j = 1 To Len(s1)
+
  End
<FONT color=#006400>' ''Se i rispettivi caratteri in posizione j all'interno delle due stringhe non corrispondono fra loro...''</font>
 
    If Mid(s1, j, 1) <> Mid(s2, j, 1) Then
 
   <FONT color=#006400>' ''...allora viene incrementata la variabile "a" per determinare il totale dei caratteri differenti...''</font>
 
      Inc a
 
<FONT color=#006400>' ''...nonché vengono aggiunti alla variabile, chiamata "diversi", affinché siano mostrati accoppiati in console:''</font>
 
      diversi = diversi & " " & Mid(s1, j, 1) & Mid(s2, j, 1)
 
    Endif
 
  Next
 
 
    Print "I caratteri diversi della stringa \"s1\" e della stringa \"s2\" sono:"; diversi
 
    Print "per un totale di "; a & " caratteri."
 
 
  '''End'''
 

Versione attuale delle 16:43, 23 giu 2023

Il caso è quello in cui, avendo due stringhe di eguale lunghezza di caratteri, vogliamo verificare quali e quanti caratteri sono eventualmente diversi all'interno delle predette stringhe.

Potremo procedere utilizzando la funzione nativa "Mid()":

Public Sub Main()
 
 Dim s1, s2, sp, diversi As String
 Dim i, c As Integer
 
 s1 = "abcd efghi lmno"
 s2 = "abcr pqghillmno"
 
 For i = 1 To Max(Len(s1), Len(s2))
' Se i rispettivi caratteri in posizione j all'interno delle due stringhe non corrispondono fra loro...
   If Mid(s1, i, 1) <> Mid(s2, i, 1) Then
' ...allora viene incrementata la variabile "c" per determinare il totale dei caratteri differenti...
     Inc c
' ...nonché vengono aggiunti alla variabile, chiamata "diversi", affinché siano mostrati accoppiati in console:
     sp = Mid(s1, i, 1)
     If IsNull(sp) Then sp = Chr(32)
     diversi &= "\n" & sp & " | " & Mid(s2, i, 1)
   Endif
 Next
 
 Print "I caratteri diversi della stringa \"s1\" e della stringa \"s2\" sono:\n\ns1   s2\n------\n"; diversi
 Print "\nper un totale di "; c & " caratteri."
  
End

oppure si potranno usare le due variabili stringa, confrontando i loro indici:

Public Sub Main()
 
 Dim s1, s2, sp, diversi As String
 Dim i, c As Integer
 
 s1 = "abcd efghi lmno"
 s2 = "abcr pqghillmno"

 For i = 1 To Max(Len(s1), Len(s2)) - 1
   If s1[i, 1] <> s2[i, 1] Then
     Inc c
     sp = s1[i, 1]
     If IsNull(sp) Then sp = Chr(32)
     diversi &= "\n" & sp & " | " & s2[i, 1]
   Endif
 Next

 Print "I caratteri diversi della stringa \"s1\" e della stringa \"s2\" sono:\n\ns1   s2\n------\n"; diversi
 Print "\nper un totale di "; c & " caratteri."
  
End