Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Пример работы с потоками ⇐ ПредыдущаяСтр 8 из 8
Приведенная ниже программа построчно считывает данные из текстового файла в буферную переменную s, формирует из них структуру mon и записывает ее в двоичном режиме в выходной файл. Далее иллюстрируется считывание из этого файла произвольной записи. #include < cstdio> #include < cstdlib> #include < cconio> #include < iostream> using namespace std; int main() { FILE *fi, *fo; if((fi = fopen(" d: \\c\\binfile.txt", " r"))==0) { cout < < " Ошибка открытия входного файла"; return 1; }; if((fo = fopen(" d: \\c\\binfile.out", " w+b"))==0) { cout < < " Ошибка открытия выходного файла"; return 1; }; const int dl = 80; char s[dl]; struct { char type[20]; int opt, rozn; char comm[40]; }mon; while (fgets(s, dl, fi)) { // Преобразование строки в структуру: strncpy(mon.type, s, 19); //Описание strncpy см. в след. разделе mon.opt = atoi(& s[20]); //Описание atoi см. в след. разделе mon.rozn = atoi(& s[25]); strncpy(mon.comm, & s[30], 40); fwrite(& mon, sizeof mon, 1, fo); } fclose(fi); int i; cin > > i; // Номер записи // Установка указателя текущей позиции файла на запись i fseek(fo, (sizeof mon)*i, SEEK_SET); fread(& mon, sizeof mon, 1, fo); cout < < " mon.type " < < mon.type < < " opt " < < mon.opt < < " rozn " < < mon.rozn < < endl; fclose(fo); }
Пример Текстовый файл состоит не более чем из ста различных слов.Слово – последовательность латинских букв(A..Z, a..z). Слова разделяются любыми символами. Слова в тексте могут повторятся. Для каждого слова необходимо указать какое количество раз оно встречается в тексте. Маленькие и большие буквы считать наразличимыми.(«Инфоматика»= «информатика») Имена входного и выходного файла задаются как параметры запуска, если при запуске имена не указаны, программа выполняет их ввод имен файлов с клавиатуры.
#include < cstdio> #include < cstring> #include < cctype> //Дан текст состоящий из латинских букв, цифр и разделителей //Словом назовем последовательность латинских букв. Известно, что в исходном тексте не более //100 различных слов(без учета регистра). //Создать файл в котором для каждого слова, встречающегося в исходном файле, укзавается //Количество повторений //пример Исходный файл: // Ура! ура! // Каникулы - счастливая пора! УРА // Результат: //Ура - 3 //Каникулы - 1 //счастливая - 1 //пора - 1 //Имена файлов задаются как параметры командной строки(если не заданы, то вводятся с клавиатуры)
// сравнение строк без учета регистра int strcmp_ign_case(const char *a, const char *b){ while(*a & & *b){ if(tolower(*a)! =tolower(*b)) break; ++a; ++b; } return (*a)-(*b); } //Построение таблицы слов int addSlovoToTable(char * arStr[], const char *str, int count[], int & n){ for(int i = 0; i< n; i++)// Цикл поиска слова в таблице if (! strcmp_ign_case(arStr[i], str)){ count[i]++; // Если слово уже занесено, увеличиваем счетчик return 0; } arStr[n] = new char[strlen(str)+1]; //Заносим новое слово strcpy(arStr[n], str); count[n]++; n++; return 0; }
int main(int argc, char *argv[]){ char *arrayStr[100]; //Таблица слов int cnt[100]; // Таблица повторений FILE *fi, *fo; // Файлы int i =0; char nameFileInput[100]; char nameFileOutput[100]; char str[100]; char *delemited = ",.-!? 0123456789_; "; for(i =0; i< 100; i++)cnt[i] = 0; // Открытие файлов с проверкой наличия параметров коммандной строки if (argc< 2){ printf(" ne zadano imy vhodnogo faila pri zapuske\n vvedite: "); gets(nameFileInput); printf(" ne zadano imy vyhodnogo faila pri zapuske\n vvedite: "); gets(nameFileOutput); } else{ strcpy(nameFileInput, argv[1]); if(argc< 3){ printf(" ne zadano imy vyhodnogo faila pri zapuske\n vvedite: "); gets(nameFileOutput); } else{ strcpy(nameFileOutput, argv[2]); } } if((fi=fopen(nameFileInput, " r"))==NULL){ printf(" Fail dly chteniy ne naiden"); return 1; } if((fo=fopen(nameFileOutput, " w"))==NULL){ printf(" Fail dly zapici ne naiden"); return 1; } i = 0; // Цикл чтения из файла while(! feof(fi)){ fgets(str, 100, fi); if(str[strlen(str)-1]=='\n'){str[strlen(str)-1]='\0'; }// Убираем символ перевода на новую строку puts(str); char *ptr; ptr = strtok(str, delemited); // Находим первое слово while(ptr){ puts(ptr); addSlovoToTable(arrayStr, ptr, cnt, i); // Добавляем слово в таблицу ptr = strtok(NULL, delemited); // Находим следующее слово }
} // Вывод в файл и освобождение памяти for(int j=0; j< i; j++){ fprintf(fo, " %s - %d\n", arrayStr[j], cnt[j]); delete []arrayStr[j]; } fclose(fi); fclose(fo); return 0;
}
|