četnost znaků ve vb6 – Visual Basic – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

četnost znaků ve vb6 – Visual Basic – Fórum – Programujte.comčetnost znaků ve vb6 – Visual Basic – Fórum – Programujte.com

 

Milan Pavel
~ Anonymní uživatel
4 příspěvky
30. 11. 2009   #1
-
0
-

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

Nahlásit jako SPAM
IP: 158.196.66.–
liborb
~ Redaktor
+18
Guru
1. 12. 2009   #2
-
0
-

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).

Nahlásit jako SPAM
IP: 85.207.166.–
Milan Pavel
~ Anonymní uživatel
4 příspěvky
1. 12. 2009   #3
-
0
-

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

Nahlásit jako SPAM
IP: 158.196.64.–
liborb
~ Redaktor
+18
Guru
1. 12. 2009   #4
-
0
-

Vypadá to jenom na drobnosti. Nemáš tam definovanou proměnou delka, pak Chr$ je zvláštní a možná i použití toho Print.

Nahlásit jako SPAM
IP: 85.207.166.–
Milan Pavel
~ Anonymní uživatel
4 příspěvky
1. 12. 2009   #5
-
0
-

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

Nahlásit jako SPAM
IP: 158.196.64.–
liborb
~ Redaktor
+18
Guru
1. 12. 2009   #6
-
0
-

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

Nahlásit jako SPAM
IP: 85.207.166.–
Milan Pavel
~ Anonymní uživatel
4 příspěvky
1. 12. 2009   #7
-
0
-

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

Nahlásit jako SPAM
IP: 158.196.64.–
asdf
~ Anonymní uživatel
26 příspěvků
2. 12. 2009   #8
-
0
-

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

Nahlásit jako SPAM
IP: 88.103.130.–
this
~ Anonymní uživatel
4 příspěvky
7. 1. 2010   #9
-
0
-

Pole dělej dynamicky. Tohle je prasárna.

Nahlásit jako SPAM
IP: 85.207.161.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

četnost znaků v řetězci — založil Petr Schenk

Četnost známek — založil cmoudek

Četnost vstupních čísel — založil elijax

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý