Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Пример программы. //Программа создает файл строк




 

//Программа создает файл строк. Признак окончания ввода - ввод пустой строки.

//Слово - это последовательность русских букв. Между словами не менее одного

//пробела. Затем строки считываются, и программа печатает те слова из каждой

//строки, которые содержат равное количество гласных и согласных букв.

 

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <stdlib.h>

 

const FNAME = "C:\\stroka.txt\0"; //имя файла объявлено константой

void make_file(char *fname); //создание файла

void pro_verka(char *fname); //чтение и обработка строк файла

int glasn(char ch); //проверка на гласность

int so_glasn(char ch); //проверка на согласность

 

void main()

{clrscr();

char fname[20] = FNAME;

make_file(fname);

pro_verka(fname);

}

 

//Функция проверяет, является ли символ гласной русской буквой

int glasn(char ch)

{static char gl[] = "АаЕеИиОоУуЫыЭэЮюЯя\0";

int i = 0;

 

while(gl[i] && gl[i] != ch)

i++;

if(gl[i])

return(1); //значит буква - гласная

else return(0); //значит буква - не гласная

}

 

//Функция проверяет, является ли символ согласной русской буквой

int so_glasn(char ch)

{static char so_gl[] = "БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ\0";

int i = 0;

 

while(so_gl[i] && so_gl[i] != ch)

i++;

if(so_gl[i])

return(1); //значит буква - согласная

else return(0); //значит буква - не согласная

}

 

//Функция создания текстового файла

void make_file(char *fname)

{unsigned char st[80]; //исходная строка

FILE *in; //текстовый файл

puts("\nСоздание файла");

puts("После ввода каждой строки нажмите <Enter>.");

puts("Признак окончания ввода - ввод пустой строки\n");

 

//Открываем файл в режиме записи (w) текста (t)

//Если файл с таким именем уже есть, то новые данные

//будут дописаны поверх старых

if((in = fopen(fname, "wt")) == NULL)

{printf("Ошибка открытия файла для записи. Нажмите <Enter>");

getchar();

exit(0);

}

 

printf("Введите строку и нажмите <Enter>\n");

printf("->");

gets(st); //функция вводит всю строку, включая

//пробелы и символ \n

while(strlen(st) != 0)

{fprintf(in, "%s\n", st);

printf("\nВведите строку и нажмите <Enter>\n");

printf("->");

gets(st);

}

fclose(in); //закрываем файл

}

 

//читаем и обрабатываем строки файла

void pro_verka(char *fname)

{FILE *in; //текстовый файл

unsigned char st[80]; //исходная строка

unsigned char sr[80]; //результирующая строка

unsigned char pr[80]; //обрабатываемое слово

int i,j,k; //номер обрабатываемого символа

int gl = 0; //число гласных букв в слове

int sogl = 0; //число согласных букв в слове

int ok; //признак гласной (согласной) буквы

int n; //длина результирующей строки

int m; //максимально возможная длина строки

//Открываем файл в режиме чтения (r) текста (t)

if((in = fopen(fname, "rt")) == NULL)

{printf("Ошибка открытия файла для чтения");

getchar();

exit(0);

}

 

printf("\nРезультат:\n");

m = 80;

fgets(st,m,in); //читаем строку файла

while(!feof(in))

{i = 0;

n = 0;

sr[i] = '\0';

 

while(st[i]) //обрабатываем строку

{k = 0;

while(st[i] != ' ' && st[i+1]) //копируем слово

{pr[k] = st[i];

k++;

i++;

}

pr[k] = '\0';

 

j = 0; //обрабатываем слово

gl = 0;

sogl = 0;

while(pr[j])

{ok = glasn(pr[j]); //считаем гласные

if(ok)

gl++;

 

ok = so_glasn(pr[j]); //считаем согласные

if(ok)

sogl++;

j++;

}

if(gl == sogl)

{for(j = 0; j < k; j++,n++)

sr[n] = pr[j];

if(st[i])

sr[n] = ' ';

n++;

}

i++;

}

 

sr[n] = '\0';

printf("\n%s",sr);

fgets(st,m,in);

}

fclose(in); //Закрываем файл

printf("\nДля завершения нажмите <Enter>");

getch();

}

 


Поделиться:

Дата добавления: 2015-04-04; просмотров: 90; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.008 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты