Gå til innhold

Opptelling av antall tegn?


Anbefalte innlegg

Videoannonse
Annonse

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

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 av apwr
Lenke til kommentar

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

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 av Qwark
Lenke til kommentar
  • 4 år senere...

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...