printЗанятие 2

printD. NO COMMENT

Ограничения: время – 1s/2s, память – 32MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

Фирма Willisoft решила сделать открытыми исходные тексты своей всемирно известной программы Mistakes-2000. Но перед опубликованием президент фирмы приказал удалить все комментарии в исходных текстах, что проще и быстрее всего сделать, написав специальную программу. Программа Mistakes-2000 была написана на языке С++, в котором имеются две следующие возможности для комментирования:
/* любой текст от символов /* до */
// любой текст после // до конца строки
Если части текста программы были на разных строках, то они должны остаться на разных строках. Символы начала комментария внутри другого комментария игнорируются (комментарии не могут быть вложенными). Символы начала комментариев игнорируются и внутри строк в двойных кавычках. Внутри таких строк может встречаться символ двойной кавычки, если перед ним стоит символ '\' (обратная косая черта). Например, "Строка с символами \" между \" и \"". Символ '\' используется в С++ для введения в строку специальных символов, например, самой обратной косой черты: "\\". Идентификаторы в языке С++ составляются из строчных и прописных латинских букв, символа '_' (подчеркивания) и цифр. Для упрощения задачи символьные константы (буквы в одинарных кавычках, например: 'A') в программе отсутствуют.
После удаления комментариев из строки нужно:
  • удалить все пробелы в конце строки (остальные пробелы не удаляются)
  • удалить пустые (не содержащие текста) строки
  • если при удалении комментария два идентификатора (ключевых слова) или числа соединяются, то вставить один пробел. Например, "int/*целое*/a;" должно превратиться в "int a;"
Во входном файле исходный текст синтаксически правильной программы общим размером не 1500 символов.
В выходной файл вывести тот же текст без комментариев, согласно требованиям.

Пример ввода

/***************************************
   Программа Mistakes-2000
   (c) Willisoft, 1980, 1984-1989, 2000
****************************************/
#include <stdio.h>

int/* для возврата кода ошибки*/main(void)
{ char *str;
  int age;

  // Ввод имени
  printf("Введи свое имя:");
  scanf("%s", str); /* Память для str не выделена! */
  // Ввод возраста
  printf("Введи свой возраст:");
  scanf("%d", d);   // Пропущен &

  printf("%s,\n ваш возраст в секундах %d\n", /* В году 365.25 дней
     */  str, d*60*60*24*365); // Результат будет правилен только для
                               /* 32-битной версий компилятора */
  return 0;
}

Вывод для примера

#include <stdio.h>
int main(void)
{ char *str;
  int age;
  printf("Введи свое имя:");
  scanf("%s", str);
  printf("Введи свой возраст:");
  scanf("%d", d);
  printf("%s,\n ваш возраст в секундах %d\n",
  str, d*60*60*24*365);
  return 0;
}
loading