Zdravím,
potřeboval bych napsat program (kamarád to má za úkol a jelikož dělám programování, tak mě poprosil o pomoc) který má počítat četnost znaků ve stringu. Já dělám v C++, takže jsem se dostal bohužel jen k tomuto. Dál si opravdu nevím rady. Prosím napovězte jak to řešit... Bude to těžké?
Příklad
Nazdar:
N 1x
a 2x
z 1z
d 1x
r 1x
Co sem vymyslel, není to nic, ale opravdu sem v tom nikdy nedělal
Private Sub Command1_Click()
Dim retezec As String
retezec = Text1.Text
delka = Len(retezec)
For i = 0 To delka - 1
Next
End Sub
Děkuji
Fórum › Visual Basic
četnost znaků ve vb6
Už tomu chybí jenom málo. Můžeš to řešit třeba takto: nadefinuješ si pole (délka 256), v tom cyklu budeš brát jednotlivé znaky toho řetězce a inkrementovat položku pole jehož index bude odpovídat kódu znaku (viz ASCII tabulka).
Nebo po převedení na pole znaků toto pole setřídíš a pak už jenom vypisuješ počty (protože stejné znaky tam budou za sebou).
To liborb :
Díky za pomoc, myslím, že po logické stránce by to mohlo být dobře, ale neověřím to, protože mi to háže chyby a já nevím co s tím.
Tady je co jsem vykoumal:
Private Sub Command1_Click()
Dim retezec As String
Dim znaky(127) As String
Dim asciikod As Integer
retezec = Text1.Text
delka = Len(retezec)
Dim i As Integer
For i = 0 To delka - 1
asciikod = Asc(retezec(i))
znaky(asciikod) = znaky(asciikod) + 1
i = i + 1
Next
i = 0
Dim cetnost As Integer
For i = 0 To 127
cetnost = znaky(i)
If cetnost > 0 Then
Print Chr$(i) & cetnost
End If
Next
End Sub
Děkuji
To liborb :
Tady je upravený kód:
Private Sub Command1_Click()
Dim retezec As String
Dim znaky(127) As String
Dim asciikod As Integer
Dim delka As Integer
retezec = Text1.Text
delka = Len(retezec)
Dim i As Integer
For i = 0 To delka - 1
asciikod = Asc(retezec(i))
znaky(asciikod) = znaky(asciikod) + 1
i = i + 1
Next
i = 0
Dim cetnost As Integer
For i = 0 To 127
cetnost = znaky(i)
If cetnost > 0 Then
Label1.Text = Chr(i) & cetnost & Chr(13)
End If
i = i + 1
Next
End Sub
Chybu to hlásí na řádku:
asciikod = Asc(retezec(i))
konkrétně to označí "retezec"
Compille error: Expected array
Tak jsem si to zkusil a (pro tebe asi bohužel) mě to funguje. Ještě tě upozorním na 3 věci:
- znaky jsou String, ale asi si chtěl Integer
- i = i + 1 v cyklech být nemusí, od toho je tam Next (asi korektnější je Next i)
- výpis ... budou se ti přemazávat výsledky, asi si chtěl něco jako ListBox
To liborb :
no ve visual studiu 2008 to funguje, ale bohužel ve vb6 ne.
znaky sem přepsal na integer to sem fakt chtěl
i=i+1 je hovadina, to tam nesmí být vůbec, jinak za 4 a napíše 2 atd...
s tím výpisem se zkusím nějak poprat.
Nechám to do večera odpočinout a proberu to s kamošem, jestli mu to jde. (Kvůli němu sem stahoval a instaloval VB6)
Zatím děkuji za pomoc a pravděpodobně se ještě ozvu
Dim Text As String, Byl As Boolean, I As Integer, J As Integer, Pocet As Integer
Dim TT(500) As String, TP(500) As Integer
Text = "asdfdjkdjkvdfjkdfn" 'prohledávaný text
Pocet = 0
For I = 1 To Len(Text)
Byl = False
For J = 1 To Pocet
If Mid(Text, I, 1) = TT(J) Then
TP(J) = TP(J) + 1
Byl = True: Exit For
End If
Next J
If Byl = False Then
Pocet = Pocet + 1
TT(Pocet) = Mid(Text, I, 1)
TP(Pocet) = 1
End If
Next I
For I = 1 To Pocet
'výpis TT(I) a TP(I)
Next I
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
četnost znaků v proměnné — založil Endy
četnost znaků v řetězci — založil Petr Schenk
četnost znaků v souboru - C — založil Petra
Četnost známek — založil cmoudek
Četnost vstupních čísel — založil elijax
Moderátoři diskuze