apwr Skrevet 9. november 2006 Del Skrevet 9. november 2006 Hei! Jeg skal lage et program som leser inn en tekst fra tastaturet og teller opp hvor mange ganger hver enkelt bokstav forekommer. Noen som kan hjelpe meg med fremgangsmåte? Lenke til kommentar
qualbeen Skrevet 9. november 2006 Del Skrevet 9. november 2006 hvis det kun er bokstavene fra a-z, uavhengig av store/små bokstaver kan du lage en int-tabell i størrelse 26. Input som skal sjekkes har jeg kalt innputstreng. Da er det bare å kjøre en for løkke: int i=0, i<innputtstreng.length(), i++, og videre få ut en og en char med innputstreng.charAt(i); Så øker du tabell-posisjonen for riktig bokstav med 1. --- Finns mange andre tilnærminger også, og det kan f.eks. være smart å bruke en tabell som strekker seg opp til char-verdien for 'z'. På den måten kan du bruke int-verdien til hver char for å finne rett tabellplass kjapt. Lenke til kommentar
pgdx Skrevet 9. november 2006 Del Skrevet 9. november 2006 Hei!Jeg skal lage et program som leser inn en tekst fra tastaturet og teller opp hvor mange ganger hver enkelt bokstav forekommer. Noen som kan hjelpe meg med fremgangsmåte? 7250528[/snapback] Du må gjerne skrive hvor langt du har kommet, og poste litt kode, så kan vi ta det derfra... Lenke til kommentar
apwr Skrevet 9. november 2006 Forfatter Del Skrevet 9. november 2006 (endret) Jeg har svært lite kode enda. Noen som kan forklare meg mer nøyaktig hvordan koden bør se ut? Alt jeg har gjort til nå er å opprette en matrise med 26 elementer: int [] hvilkeNokstaver = new int[26]; Endret 9. november 2006 av apwr Lenke til kommentar
pgdx Skrevet 11. november 2006 Del Skrevet 11. november 2006 Hvis du ønsker å bare ta i mot små/store bokstaver fra a→z, kan du jo begynne med å hente ut verdien til tegnet og øke hvilkeNokstaver[tegnverdi]++; Men du må huske å gjøre det slik at 'a' får verdien 0. Lenke til kommentar
apwr Skrevet 11. november 2006 Forfatter Del Skrevet 11. november 2006 Takk, skal se hva jeg får til. Det hade vært fint om du hadde giddet å utdype litt om hvordan dette gjøres enda mer Lenke til kommentar
HV Skrevet 11. november 2006 Del Skrevet 11. november 2006 Hei Kanskje du kan benytte Hashtable? Det er jo ikke sikkert at alle tegn forekommer. Legge inn bokstaven din som key og antall forekomster som value og øke for hver forekomst? Så kan du vell gjøre hva du måtte ville med resultatet... Jeg printet alt så du kan se at det virker. Litt usikker på om jeg skal poste.. Annbefaler deg å se nærmere på int tabellen og ikke benytte deg av kode du ikke forstår. Hashtable løsning: Klikk for å se/fjerne innholdet nedenfor import java.util.Enumeration; import java.util.Hashtable; public class LetterCounter { public static void main(String[] args) { String s = "Dddd Eeee"; Hashtable<Character, Integer> h = new Hashtable<Character, Integer>(); char[] array = s.toCharArray(); for (char c : array) { h.put(c, (h.containsKey(c) ? h.get(c) + 1 : 1)); } Enumeration<Character> e = h.keys(); while (e.hasMoreElements()) { char c = e.nextElement(); System.out.println("\"" + c + "\" - " + h.get(c)); } } } Vennlig hilsen HV Lenke til kommentar
Qwark Skrevet 12. november 2006 Del Skrevet 12. november 2006 (endret) Denne skal fungere, nesten bra, får en indexoutofbounds på linje 11 if(c.get(i).equals(s.charAt(j))) men fant ikke ut i farta hvorfor. er muligens litt trøtt:sleep: Klikk for å se/fjerne innholdet nedenfor public class tellBokstaver { public static void counter(String s) { ArrayList <Object> c = new ArrayList <Object>(); String tmp = ""; int counter = 0; for (int i = 0; i < s.length(); i++) { if(!c.contains(s.charAt(i))){ c.add(s.charAt(i)); for (int j = i; j < s.length(); j++) { if(c.get(i).equals(s.charAt(j))){ counter++; } }System.out.println("Antall " +s.charAt(i) + " i teksten er " +counter +"\n"); } } } public static void main(String[] args) { String tekst = "en to tre fire fem"; counter(tekst); } } Endret 12. november 2006 av Qwark Lenke til kommentar
Mælm Skrevet 5. november 2011 Del Skrevet 5. november 2011 Ser dette er gammel tråd, men håper noen kan legge inn pastebin med kodeeksempler? sliter litt her=) Lenke til kommentar
SpinozaSittSkjegg Skrevet 10. november 2011 Del Skrevet 10. november 2011 Det jeg ville gjort i dette tilfellet ville vært som trådstarter begynte med; Opprett en tabell: int[] alphArray = new int[26]; Så finner du fram unicode-referansen til alle bokstavene, i formatet du bruker, du kan sjekke selv med noe slikt no: char y = 'A'; int x = 0; for (int i = 0; i < 26; i++ , ++y , x=y) { System.out.println("'" +y + "'" + " tilsvarer: " + x); } Så er det ikke værre enn at du tar en ny for-løkke som kjører gjennom lengden strengen som skal leses og en for-løkke som kjører gjennom lengden på de forskjellige unicodene du skal bruke. Ta med en tekst.toUpperCase(); så slipper du alle varianter. (Æ, Ø, Å må legges inn manuelt). Lenke til kommentar
torbjørn marø Skrevet 10. november 2011 Del Skrevet 10. november 2011 Her er en litt anderledes løsning i C#: public static void Main() { foreach(var x in "litt tekst her med masse tegn".GroupBy(c => c).OrderBy(c => c.Key)) Console.WriteLine("bokstav '{0}' forekom {1} ganger", x.Key, x.Count()); } Output: bokstav ' ' forekom 5 ganger bokstav 'a' forekom 1 ganger bokstav 'd' forekom 1 ganger bokstav 'e' forekom 5 ganger bokstav 'g' forekom 1 ganger bokstav 'h' forekom 1 ganger bokstav 'i' forekom 1 ganger bokstav 'k' forekom 1 ganger bokstav 'l' forekom 1 ganger bokstav 'm' forekom 2 ganger bokstav 'n' forekom 1 ganger bokstav 'r' forekom 1 ganger bokstav 's' forekom 3 ganger bokstav 't' forekom 5 ganger Lenke til kommentar
fleskesvor Skrevet 10. november 2011 Del Skrevet 10. november 2011 Ikke like elegant, men i java kan du gjøre: Map<Character, Integer> chars = new TreeMap<Character, Integer>(); for (char c : "litt tekst her med masse tegn".toCharArray()) chars.put(c, chars.containsKey(c) ? chars.get(c) + 1 : 1); for (Character c : chars.keySet()) System.out.println(String.format("bokstav '%c' forekom %d ganger", c, chars.get(c))); Output blir som i svaret til torbjørn marø. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå