10508. Подсчитать буквы в тексте

 

Задан текст. Сколько раз каждая латинская буква (от aдо z) встречается в тексте? Прописные и строчные буквы различать не следует.

 

Вход. Содержит последовательность символов – текст.

 

Выход. Выведите 26 целых чисел в одной строке: количество раз, которое каждая латинская буква встречается в тексте.

 

Пример входа

This is A man :-)

Hello "Ben"! I am here!....    fine

 

Пример выхода

3 1 0 0 5 1 0 3 4 0 0 2 2 3 1 0 0 1 2 1 0 0 0 0 0 0

 

 

РЕШЕНИЕ

обработка текста

 

Анализ алгоритма

Для решения задачи воспользуемся сортировкой подсчетом. В ячейках массива ar[i] подсчитаем количество символов с ASCII кодом, равным i. Подсчет ведем только для латинских букв нижнего регистра. Каждую букву верхнего регистра будем переводить в нижний.

 

Реализация алгоритма

Объявим массив ar.

 

int ar[256];

 

Основная часть программы. Читаем текст символ за символом.

 

while (scanf("%c", &ch) == 1)

{

  if (isalpha(ch))

  {

 

Если символ ch является буквой, то преобразуем его в нижний регистр. Увеличиваем ar[ch] на 1.

 

    ch = tolower(ch);

    ar[ch]++;

  }

}

 

Для каждой буквы ch от aдо z выводим количество раз, которое она встречается в тексте.

 

for (ch = 'a'; ch <= 'z'; ch++)

  printf("%d ", ar[ch]);

 

Java реализация

 

import java.util.*;

 

public class Main {

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int ar[] = new int[256];

  

    while(con.hasNext())

    {

      char s[] = con.nextLine().toCharArray();

      for(int i = 0; i < s.length; i++)

        if(Character.isLetter(s[i]))

          ar[Character.toLowerCase(s[i])]++;

    }

   

    for(int i = 'a'; i <= 'z'; i++)

      System.out.print(ar[i] + " ");

    con.close();

  }

}

 

Java реализация – read

 

import java.util.*;

import java.io.*;

 

public class Main {

  public static void main(String[] args) throws IOException

  {

    Scanner con = new Scanner(System.in);

    int ar[] = new int[256];

    while(true)

    {

      int ch = System.in.read();

      if (ch == -1) break;

      if(Character.isLetter(ch)) ar[Character.toLowerCase(ch)]++;

    }

   

    for(int i = 'a'; i <= 'z'; i++)

      System.out.print(ar[i] + " ");

    con.close();

  }

}

 

Java реализация файлы

 

import java.util.*;

import java.io.*;

 

public class Main {

  static byte[] f(int n)

  {

    return String.valueOf(n).getBytes();

  }

 

  public static void main(String[] args) throws IOException 

  {

    FileInputStream fis = new FileInputStream("input.txt");

    FileOutputStream fos = new FileOutputStream("output.txt");   

    int ch;

    int ar[] = new int[256];

  

    while((ch = fis.read()) != -1)

      if(Character.isLetter(ch)) ar[Character.toLowerCase(ch)]++;

   

    //for(int i = 'a'; i <= 'z'; i++)

    //  System.out.print(ar[i] + " ");

    for(int i = 'a'; i <= 'z'; i++)

    {

      fos.write(f(ar[i]));

      fos.write(' ');

    }

    fis.close();

    fos.close();

  }

}