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();
}
}