КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример программы. //Программа создает файл строк
//Программа создает файл строк. Признак окончания ввода - ввод пустой строки. //Слово - это последовательность русских букв. Между словами не менее одного //пробела. Затем строки считываются, и программа печатает те слова из каждой //строки, которые содержат равное количество гласных и согласных букв.
#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(); }
|