Назад | Начало урока | Вперед
Содержание

Глава 5

Задача 5.3 "Комментарии."

В файле хранится некоторый текст. Он разбит на параграфы, которые разделены пустыми строками. Напишите программу, которая считывает текст, а затем выводит его, игнорируя фрагменты в фигурных скобках. Следует обеспечить вывод предупреждений в следующих случаях:

- внутри фигурных скобок обнаружена еще одна скобка.
- обнаружена закрывающая скобка без соответствующей ей открывающей скобки.
- в параграфе отсутствует парная закрывающая скобка.

В конце каждого параграфа необходимо выводить статистику о том, какая доля текста (в процентах) приходится на комментарии в скобках (пробелы не учитываются). Подсказка: эта программа идеально подходит для проверки методов, предназначенных для работы с символами; при ее написании целесообразно использовать булевы переменные.

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

Этот отрывок текста имеет такую же длину, как и следующий комментарий. (Этот комментарий имеет такую же длину как и предыдущий отрывок текста. Можете проверить.) Можете проверить. ( Для этого

Пример выхода программы:

Этот отрывок текста имеет такую же длину, как и следующий комментарий. Можете проверить. ( Для этого
*** Нет закрывающей скобки

Комментарии составляют 50% текста

Решение

Исходный текст, который мы хотим обработать может иметь следующий вид:

Подсказка

Будем считывать полинейно, присваивать переменной типа String, и затем проверять эту строковую переменную на наличие в ней фигурных скобок. Сделаем необходимые подсчеты, и выведем текст игнорируя текст в скобках. Посчитаем проценты.

Программа выдает всю необходимую информацию о скобках.

Код программы:


import java.io.*;
import javagently.*;

class Comments {

Comments() throws IOException {
Stream in = new Stream(System.in);
Stream fin = new Stream(System.in);
Stream fout= new Stream ("data.out",Stream.WRITE);
try {
fin = Filer.open("data.txt");
}
catch (FileNotFoundException e) {
System.out.println("Five tries up");
System.out.println("Connecting to keyboard by default");
}
String s;
char ch;
boolean b = true;
int n = 0;
int m = 0;
int j = 0;
int mas[] = new int[8];
for(int i=0;i < 8;i++)
mas[i] = 0;

// try read file try {
for(;;){
s = fin.readLine();
if(s.length() == 0){
fout.println("\n Total chars " + (mas[1]+1));
fout.println(" Chars in parethesis " + (mas[2]+1));
n = (int)mas[2]*100/mas[1];
fout.println("Comments is " + n + "% of text");
m = (mas[3] - mas[4]);
if(m > 0 ){
fout.println("Not close parenthesis " + m);
}
if(m < 0 ){
fout.println("Not open parenthesis " + (-m));
}

if(mas[6] > 0)
fout.println(" Inside open parenthesis " + (mas[6]));
fout.println("\n");

for(int i=0;i < 8;i++)
mas[i] = 0;

continue;

}

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

mas[1]++;
if(ch==' ')
mas[1]--;
if(ch == '{'){

mas[3]++;
mas[5]++;

b = false;
}
if(ch == '}'){
mas[4]++;
mas[5]--;
if(mas[5] > 0)
mas[6]++;
mas[5] = 0;
b = true;
continue;
}
if(b == false){
mas[2]++;
if(ch ==' ')
mas[2]--;
continue;
}
fout.print(ch);
}//end for2
}//end for
}
catch (EOFException e) {
System.out.println(" All data is reading ");
}
fin.close();
fout.close();

}//end constructor

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

new Comments();
}
}

Результат :

Подсказка


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz