nejdelsi slovo   otázka

VB6/VBA

Dobrý den,potrebovala bych poradit s kodem ktery vyhleda nejdelsi slovo uzivateli zadane vete bez pouziti fce split.

Zacla sem tim ze sem si udelal for cyklus 1 to len(veta)

pak sem si nalsa pomoci instr-pozici mezery a pak nejak chtela dostat do nejake te promene ty jednotlivy slova a tam uz sem se zasekla resila sem to pres mid ale nevim ty parametry jako pocet a pozice tak kdyby mi to mohl nekdo napsat jak na to dik

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pardon, přehlédl jsem to bez funkce split.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

asi bych řešil tak, že po načtení věty si spočítám počet slov a to dám do parametru pole do kterého postupně načtu slova z dané věty no a poté přes funkci len přečtu délku slov a uložím do druhého pole no a poté max hodnotu pole a tím mám i pořadí a protože jsou pole stejně velká tak na základě pořadí vím i které a jaké to slovo je nejdelší.

Asi existuje elegantnější řešení

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A proč nelze použít "split"? Opět školní projekt/zadání, které dáváte vyřešit někomu jinému?!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pozor na ty domácí úkoly, neradi to tady vidí,

ale je vidět snaha, otestuj si to a uvidíš...

Snad i více mezer, ale to by snad nemělo vadit.

V modulu :

Option Explicit

Public Type MaxWordsInSentence
    Length As Long
    Words As New Collection
End Type

Function FindMaxWordInSentence(ByVal sentence As String) As MaxWordsInSentence
    'bez tecky na konci
    If InStrRev(sentence, ".") = Len(sentence) Then
        sentence = Left(sentence, InStrRev(sentence, ".") - 1)
    End If
    'ukrajovat az do konce
    Do While Len(sentence) > 0
        If InStr(sentence, Space(1)) > 0 Then
            If (InStr(sentence, Space(1)) - 1) > FindMaxWordInSentence.Length Then
                FindMaxWordInSentence.Length = InStr(sentence, Space(1)) - 1
                While FindMaxWordInSentence.Words.Count > 0
                    FindMaxWordInSentence.Words.Remove FindMaxWordInSentence.Words.Count
                Wend
                FindMaxWordInSentence.Words.Add Left(sentence, InStr(sentence, Space(1)) - 1)
            ElseIf (InStr(sentence, Space(1)) - 1) = FindMaxWordInSentence.Length Then
                FindMaxWordInSentence.Words.Add Left(sentence, InStr(sentence, Space(1)) - 1)
            End If
            sentence = Mid(sentence, InStr(sentence, Space(1)) + 1)
        Else
            If Len(sentence) > FindMaxWordInSentence.Length Then
                FindMaxWordInSentence.Length = Len(sentence)
                While FindMaxWordInSentence.Words.Count > 0
                    FindMaxWordInSentence.Words.Remove FindMaxWordInSentence.Words.Count
                Wend
                FindMaxWordInSentence.Words.Add sentence
            ElseIf Len(sentence) = FindMaxWordInSentence.Length Then
                FindMaxWordInSentence.Words.Add sentence
            End If
            sentence = ""
        End If
    Loop
End Function

Sub NajdiNejdelsiSlovoBezPouzitiSplit()
    'zadání věty
    Dim veta As String
    veta = "Tohle je prohledávaná věta k prohledávání."
    'vysledek dle funkce
    Dim vysledek As MaxWordsInSentence
    vysledek = FindMaxWordInSentence(veta)
    'zobrazit hlaseni
    Dim msg As String
    msg = "Věta: " & veta & vbCrLf
    msg = msg & "Počet znaků nejdelšího slova: " & vysledek.Length & vbCrLf
    
    If vysledek.Words.Count > 0 Then
        msg = msg & "Počet nalezených nejdelších slov: " & vysledek.Words.Count & vbCrLf
        msg = msg & IIf(vysledek.Words.Count > 1, "Nalezená slova: ", "Nalezené slovo: ")
        Dim i As Integer
        For i = 1 To vysledek.Words.Count
            msg = msg & IIf(i > 1, ",", "") & vysledek.Words(i)
        Next
    End If
    MsgBox msg
End Sub

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback