Текст программы MaxWord (956599)
Текст из файла
Текст программы MaxWord
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
char *getbuf(char *, FILE *);
void format(char *);
int maxword(char *);
void print(char *, int);
int errormes(int, char *);
char **poutword; // Для хранения уже выведеных слов
int numoutword = 0, sizeoutword = 0;
int main(int argc, char *argv[])
{
int maxlenword = 0, curlenword, i;
char inbuf[BUFSIZ];
FILE *pfile;
if (argc != 2) return errormes(1, NULL);
if ((pfile = fopen(argv[1], "r")) == NULL)
return errormes(2, argv[1]);
while (getbuf(inbuf, pfile) != NULL) // Ищем максимальную длину слова в файле
{
format(inbuf);
curlenword = maxword(inbuf);
if (maxlenword < curlenword)
maxlenword = curlenword;
}
rewind(pfile); // Возвращаемся в начало файла
while (getbuf(inbuf, pfile) != NULL) // Выводим слова имеющие максимальную длину
{
format(inbuf);
print(inbuf, maxlenword);
}
for (i = 0; i < numoutword; i++) // Освобождаем выделенную память
free(poutword[i]);
free(poutword);
fclose(pfile);
return 0;
}
char *getbuf(char *pinbuf, FILE *pfile) // Осуществляем ввод строки из файла в буфер
{
return fgets(pinbuf, BUFSIZ, pfile);
}
void format(char *pstr) // Заменяет все символы кроме латинских букв на пробелы
{
while (*pstr != '\0')
{
if (!isalpha(*pstr))
*pstr = ' ';
pstr++;
}
return;
}
int maxword(char *pstr) // Ищет максимальную длину слов из буфера (строки) pstr
{
int maxlen = 0, curlen;
char *pword;
while ((pword = strtok(pstr, " ")) != NULL)
{
curlen = strlen(pword);
if (maxlen < curlen)
maxlen = curlen;
pstr = NULL;
}
return maxlen;
}
void print(char *pstr, int maxlen) // Выводит слова длины maxlen из буфера (строки) pstr
{
char *pword;
int k, existword;
while ((pword = strtok(pstr, " ")) != NULL)
{
if (strlen(pword) == maxlen) // Если слово имеет максимальную длину
{ // Проверяем не было ли уже такого слова
for (k = 0, existword = 0; k < numoutword; k++)
{ // Если слово уже было
if (!strcmp(poutword[k], pword))
existword |= 1; // Ставим флаг существования в единицу (операция "или")
}
if (!existword) // Если слова еще не встречалось
{
fprintf(stdout, "%s\n", pword); // Выводим слово
sizeoutword += sizeof(char *); // Считаем новый размер м-ва указ-лей на слова
poutword = realloc(poutword, sizeoutword); // Увел-ем размер массива указателей
if (poutword == NULL) exit(errormes(3, NULL)); // Если недостаточно памяти
poutword[numoutword] = calloc(maxlen + 1, sizeof(char)); // Выд. память под слово
if (poutword[numoutword] == NULL) exit(errormes(3, NULL));
strcpy(poutword[numoutword], pword); // Копируем слово в выделеный массив
numoutword++; // Увеличиваем счетчик выведенных слов
}
}
pstr = NULL; // При повторном вызове в strtok передаем NULL
}
return;
}
int errormes(int kod, char *pstr) //Вывод сообщения об ошибке соответствующее коду kod
{
if (kod == 1)
fprintf(stderr, "\nНеобходимо указать имя файла.\n");
if (kod == 2)
{
fprintf(stderr, "\nОшибка открытия файла на чтение.\n");
perror(pstr);
}
if (kod == 3)
fprintf(stderr, "\nНедостаточно памяти, возможно файл слишком большой.\n");
return -1;
}
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.