Задания по файлам на С. Работа с файлами с 8. Программа #include #include #include int main() file txt char strtxt100100, d1
Скачать 23.77 Kb.
|
Задание 8. В данном файле символы каждой строки упорядочить по алфавиту. Программа: #include #include #include int main() { FILE* txt; char strtxt[100][100], d[1]; int i, j, k, count = 0, len, max = 0; if (!(txt = fopen("p3.txt", "r"))) { //Проверяем открывается ли файл. printf("Error opening file!"); return 0; } while (fgets(strtxt[count], 100, txt)) count++; //Считаем количество строк в файле. txt = fopen("p3.txt", "w"); for (k = 0; k < count; k++) //Пока не for не пройдёт все строки. { len = strlen(strtxt[k]) - 1; //Без -1 появляется пробел, с -2 удаляется первый символ. for (i = 0; i < len; i++) //Пока не пройдёт все символы в строке. { for (j = 0; j < len - i; j++) if ((int)strtxt[k][j] > (int)strtxt[k][max]) //Если max значение меньше j, то присваиваем max значение j. max = j; //Находим максимальное значение. d[0] = strtxt[k][max]; strtxt[k][max] = strtxt[k][len - i - 1]; strtxt[k][len - i - 1] = d[0]; max = 0; //Сортируем "массив" символов в строке по возрастанию. } fputs(strtxt[k], txt); //Записываем ответ. } printf("Конец."); fclose(txt); return 0; } Задание 9. В файле записана непустая последовательность целых чисел (целое число – это последовательность десятичных цифр, начинающаяся знаком + или -). Создать новый файл, где все отрицательные числа заменены нулем. Программа: #include #include using namespace std; int main() { setlocale(LC_ALL, "Russian"); FILE* txt1; FILE* txt2 = fopen("p.txt", "wt"); ifstream inp("p9.txt"); if (!(txt1 = fopen("p9.txt", "r+"))) { //Проверяем наличие файла. printf("Файл не открывается."); return 0; } while (inp.peek() != EOF) { //Проходит через каждый символ в файле. int t; inp >> t; //Значение симвала в файле присваивается переменной t. if (t > 0 || t == 0) { //Если t больше 0 или равно ему, то просто записываем значение в файл. fprintf(txt2, "%d \n ", t); } if (t < 0) { //Если t меньше нуля, то присваиваем t значение 0 и записываем в файл. t = 0; fprintf(txt2, "%d \n ", t); } } return 0; } Задание 10. В файле подсчитать количество строк, которые начинаются и оканчиваются один и тем же символом. #include #include int main() { setlocale(LC_ALL, "rus"); FILE* txt; char strtxt[80]; int count = 0; if (!(txt = fopen("p10.txt", "r+"))) { //Проверяем наличие файла. printf("Файл не открывается"); return 0; } while (fgets(strtxt, 80, txt)) //Пока не пройдёт все строки. if (strtxt[0] == strtxt[strlen(strtxt) - 2]) //Сравниваем первый и последний символ. count++; //Считаем количество строк. printf("Количество строк: %d", count); fclose(txt); return 0; } Задание 11. Даны три файла разного размера (имена файлов вводит пользователь). Заменить содержимое самого длинного файла на содержимое самого короткого. Программа: #include #include int main() { setlocale(LC_ALL, "rus"); FILE* txt1, * txt2, * txt3; FILE* txtB = nullptr; //Нулевой указатель типа FILE. FILE* txtM = nullptr; char strtxt[80], str1[80], str2[80], str3[80]; int count1 = 0, count2 = 0, count3 = 0; printf("Имя 1-го файла:\n"); gets_s(str1); //Присваиваем переменной файл. printf("Имя 2-го файла:\n"); gets_s(str2); printf("Имя 3-го файла:\n"); gets_s(str3); if (!(txt1 = fopen(str1, "r"))) { //Проверяем наличие и работу файла. printf("Файл 1 не открывается."); return 0; } if (!(txt2 = fopen(str2, "r"))) { printf("Файл 2 не открывается."); return 0; } if (!(txt3 = fopen(str3, "r"))) { printf("Файл 3 не открывается."); return 0; } while (fgetc(txt1) != EOF) //Проходит весь файл. count1++; //Считает количество символов. while (fgetc(txt2) != EOF) count2++; while (fgetc(txt3) != EOF) count3++; fclose(txt1); fclose(txt2); fclose(txt3); if (count1 < count2 && count1 < count3) { //Находим самый короткий файл. txtB = fopen(str1, "r"); if (count2 < count3) //Находим самый длинный файл. txtM = fopen(str3, "w"); else txtM = fopen(str2, "w"); } else if (count2 < count1 && count2 < count3) { txtB = fopen(str2, "r"); if (count1 < count3) txtM = fopen(str3, "w"); else txtM = fopen(str1, "w"); } else if (count3 < count1 && count3 < count2) { txtB = fopen(str3, "r"); if (count1 < count2) txtM = fopen(str2, "w"); else txtM = fopen(str1, "w"); } while (fgets(strtxt, 80, txtB)) //Считываем сиволы из txtB и сохраняем их в strtxt. fputs(strtxt, txtM); //Записываем в файл txtM strtxt. fclose(txtB); fclose(txtM); printf("Конец."); return 0; } Задание 12. Имеются два файла (размеры файлов могут не совпадать). Переписать элементы первого файла во второй, второго – в первый. Использовать вспомогательный файл. Программа: #include #include int main() { FILE* txt1, * txtP, * txt2; char strtxt[80]; if (!(txt1 = fopen("p12.txt", "r"))) { //Проверяем наличие и работу файла. printf("Файл 1 не открывается."); return 0; } if (!(txtP = fopen("P.txt", "w"))) { printf("Файл не открывается."); return 0; } if (!(txt2 = fopen("p21.txt", "r"))) { printf("Файл 2 не открывается."); return 0; } while (fgets(strtxt, 80, txt1)) //Считываем символы из txt1 и записываем их в strtxt. fputs(strtxt, txtP); //Записываем strtxtx в txtP. fclose(txt1); fclose(txtP); txt1 = fopen("p12.txt", "w"); while (fgets(strtxt, 80, txt2)) //Считываем символы из txt2 и записываем их в strtxt. fputs(strtxt, txt1); //Записываем strtxtx в txt1. fclose(txt1); fclose(txt2); txtP = fopen("P.txt", "r"); txt2 = fopen("p21.txt", "w"); while (fgets(strtxt, 80, txtP)) //Считываем символы из txtP и записываем их в strtxt. fputs(strtxt, txt2); //Записываем strtxtx в txt2. fclose(txtP); fclose(txt2); printf("Конец."); return 0; } Задание 13. Определить, какая строка является самой длинной в заданном файле. Программа: #include #include int main() { setlocale(LC_ALL, "rus"); FILE* txt; char strtxt[80]; int i = 0, max = 0, maxLen = 0; if (!(txt = fopen("p13.txt", "r+"))) { //Проверяем работу и наличие файла. printf("Файл не открывается."); return 0; } while (fgets(strtxt, 80, txt)) { //Считываем символы из txt и записываем их в strtxt. if (strlen(strtxt) > maxLen) { //Сравниваем длину данной строки с максимальной. maxLen = strlen(strtxt); //Если данная строка больше максимальной. max = i + 1; //Определяем номер максимальной строки. } i++; } printf("Самая длинная строка: %d", max); fclose(txt); return 0; } |