Avatar billede curriculum Nybegynder
01. juli 2005 - 15:24 Der er 23 kommentarer og
1 løsning

Udregning av streng sammenligning

Jeg vil gerne gerne have en funktion der kan udregne hvor mange bokstaver er ens i to strenge der sammenlignes. Har nogen en sådan funktion ?
Avatar billede arne_v Ekspert
01. juli 2005 - 15:27 #1
det støreste N hvor de første N tegn i de to strenge er ens ?

eller det antal tegn somogså findes i den anden streng ?

eller ?
Avatar billede curriculum Nybegynder
01. juli 2005 - 15:30 #2
Streng 1: kendt
Streng 2: kentd

Denne sammenligning skal give 2 (also 2 fejl bokstaver). Skal ikke at sammenlige case sensitivitet.
Avatar billede arne_v Ekspert
01. juli 2005 - 15:32 #3
der er ikke nogen indbygget funktion til det

du bliver nødt til at lade en løkke løbe gennem strengene og sammenligne
(case insensitivt) og tælle antal rigtige eller forkerte op
Avatar billede curriculum Nybegynder
01. juli 2005 - 15:34 #4
har du en såden funktion i vb eller C# ?
Avatar billede arne_v Ekspert
01. juli 2005 - 15:35 #5
giv mig 3 minutter
Avatar billede curriculum Nybegynder
01. juli 2005 - 15:37 #6
np :)
Avatar billede arne_v Ekspert
01. juli 2005 - 15:38 #7
public static int DiffChar(string s1,string s2)
    {
        string tmp1 = s1.ToUpper();
        string tmp2 = s2.ToUpper();
        int res = 0;
        for(int i = 0; i < tmp1.Length; i++)
        {
            if(tmp1[i] != tmp2[i])
            {
                res++;
            }
        }
        return res;
    }
Avatar billede arne_v Ekspert
01. juli 2005 - 15:39 #8
du har ikke forklaret hvad der skal ske hvis strengene ikke er lige lange, så det
er der ikke taget hensyn til
Avatar billede curriculum Nybegynder
01. juli 2005 - 15:43 #9
ex.
Streng 1: ken
Streng 2: kendt

Så skal den give 2 også..
Avatar billede curriculum Nybegynder
01. juli 2005 - 15:47 #10
den funktion du oplyste er tmp1 og tmp2 ikke lavet til array's til sammenligningen
Avatar billede arne_v Ekspert
01. juli 2005 - 15:49 #11
public static int DiffChar(string s1,string s2)
    {
        string tmp1 = s1.ToUpper();
        string tmp2 = s2.ToUpper();
        int res = 0;
        for(int i = 0; i < Math.Min(tmp1.Length,tmp2.Length); i++)
        {
            if(tmp1[i] != tmp2[i])
            {
                res++;
            }
        }
        res = res + Math.Max(tmp1.Length,tmp2.Length) - Math.Min(tmp1.Length,tmp2.Length);
        return res;
    }
Avatar billede curriculum Nybegynder
01. juli 2005 - 15:56 #12
skal den ikke være ?
string() tmp1 = s1.ToUpper().Split;
string() tmp2 = s2.ToUpper().Split;
Avatar billede arne_v Ekspert
01. juli 2005 - 15:58 #13
det tror jeg ikke

så har jeg ihvertfald misforstået spørgsmålet ...
Avatar billede curriculum Nybegynder
01. juli 2005 - 16:00 #14
min sidste kommentar var forkert, sorry
Jeg laver min funktion i vb, og der fejler den på  tmp(i) og tmp2(i) ind i løkken
Jeg får denne fejl:
Expression is not an array or a method, and cannot have an argument list.
Avatar billede curriculum Nybegynder
01. juli 2005 - 16:02 #15
Funktion er sådan ud nu...

Public Function DiffChar(ByVal s1 As String, ByVal s2 As String) As Integer
        Dim tmp1 As String = s1.ToUpper()
        Dim tmp2 As String = s2.ToUpper()
        Dim res As Integer = 0
        Dim i As Integer

        For i = 0 To Math.Min(tmp1.Length, tmp2.Length)
            If (tmp1(i) <> tmp2(i)) Then
                res += 1
            End If
        Next

        res = res + Math.Max(tmp1.Length, tmp2.Length) - Math.Min(tmp1.Length, tmp2.Length)

        DiffChar = res
    End Function
Avatar billede arne_v Ekspert
01. juli 2005 - 16:08 #16
Public Shared Function DiffChar(ByVal s1 As String, ByVal s2 As String) As Integer
        Dim tmp1() As Char = s1.ToUpper.ToCharArray
        Dim tmp2() As Char = s2.ToUpper.ToCharArray
        Dim res As Integer = 0
        Dim i As Integer
        For i = 0 To Math.Min(tmp1.Length, tmp2.Length) - 1
            If tmp1(i) <> tmp2(i) Then
                res = res + 1
            End If
        Next
        res = res + Math.Max(tmp1.Length, tmp2.Length) - Math.Min(tmp1.Length, tmp2.Length)
        Return res
    End Function
Avatar billede arne_v Ekspert
01. juli 2005 - 16:08 #17
det er lidt anderledes i VB.NET fordi den ikke har indexers som C#
Avatar billede curriculum Nybegynder
01. juli 2005 - 16:12 #18
det var sørens...
Avatar billede curriculum Nybegynder
01. juli 2005 - 16:53 #19
Sådan skulle den se ud...

Public Function DiffChar(ByVal s1 As String, ByVal s2 As String) As Integer
        Dim tmp1 As String = s1.ToUpper
        Dim tmp2 As String = s2.ToUpper
        Dim res As Integer = 0
        Dim i As Integer

        For i = 1 To Math.Min(tmp1.Length, tmp2.Length)
            If Mid(tmp1, i, (i + 1)) = Mid(tmp2, i, (i + 1)) Then
                res += 1
            End If
        Next

        res = res + (Math.Max(tmp1.Length, tmp2.Length) - Math.Min(tmp1.Length, tmp2.Length))

        DiffChar = res
    End Function
Avatar billede curriculum Nybegynder
01. juli 2005 - 16:54 #20
arne_v: send mig et svar, du hjalp mig en hel del...
Avatar billede arne_v Ekspert
01. juli 2005 - 16:57 #21
jeg vil anbefale 16:08:09 fremfor brug af Mid som er VB6'isme

men hvad pokker

jeg ligger et svar
Avatar billede curriculum Nybegynder
01. juli 2005 - 17:02 #22
ja du har ret, din 16:08:09 er den bedre løsning... takker
Avatar billede arne_v Ekspert
01. juli 2005 - 17:04 #23
den VB.NET'ske version af Mid er Substring
Avatar billede curriculum Nybegynder
01. juli 2005 - 17:08 #24
Okey så lærte jeg det i dag.. jeg er nemli en gammel VB6'er... som fornylig er startet på vb.net :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester