Вставка пробелов в файл - C (СИ)
Формулировка задачи:
В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов (пробелы в строке должны быть вставлены равномерно).
В общем начал писать программу, ниже код:
Здесь рассмотрен случай, если файл пуст. Но также файл может быть и с содержимым.
Я думаю, что содержимое str[1000] просматривается на строки, в которых будут три случая. Если строка файла <80, =80 и >80.
Т.е.
В общем прошу помощи.. подсказать как лучше организовать будет эти три случая)
Я так понимаю, что ещё в каждом случае будет по 3 случая. Т.е., если (str[i] == ' ')&&(str[i]==' '), если (str[i] == ' ')&&(str[i]!=' '), если (str[i] != ' ').
Эти три подслучая, лучше подпрограммой сделать?.
P.S. Пользовался поиском - ничего толкового не нашел.
//--------------------------------------------------------------------------- #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #include <stdio> #include <stdlib> int main(int argc, char* argv[]) { char str[1000]; int i, j; FILE *file; file = fopen("a.txt", "a+"); /*Выводим содержимое файла*/ printf("Soderjanie faila:\n"); fgets(str, 1000, file); puts(str); /*Если файл пуст - заполнение пробелами*/ if (fscanf(file, "%c", str) < 1) { printf("File pust! Zapolnenie probelami...\n\nGotovo!"); for (i = 0; i < 10; i++) { for (j = 0; j < 80; j++) { fputc(' ', file); if ((i == 9) && (j == 79)) fclose(file); } fputc('\n', file); } } else { printf("File ne pust! Zapolnenie probelami...\n\nGotovo!"); fclose(file); } getchar(); return 0; } //---------------------------------------------------------------------------
for(i = 0; i < 1000; i++) { if (str[i] == '\n') // <80 { k = i; /*Код*/ } /*Остальные три случая*/ }
Решение задачи: «Вставка пробелов в файл»
textual
Листинг программы
//--------------------------------------------------------------------------- #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #include <stdio> #include <stdlib> #include <string> int main(int argc, char* argv[]) { char str[1000]; int i, j, k = 0, r, p; FILE *file; FILE *file2; char *a[5] = {"a.txt"}; char *b[5] = {"b.txt"}; file = fopen(*a, "r"); // Îòêðûòèå ГґГ*éëГ* file2 = fopen(*b, "a"); /*ÏðîâåðêГ* Г*Г* äîñòóïГ*îñòü îòêðûòèÿ ГґГ*éëГ**/ if (!file) { fprintf(stderr, "Ne mogu otkrit fail\n"); getchar(); //fclose(file); exit(1); } /*Âûâîäèì ñîäåðæèìîå ГґГ*éëГ**/ printf("Soderjanie faila:\n"); while (fgets(str, 80, file) != NULL) { printf("%s", str); r = strlen(str); printf("\n%d", r); if (str[r-1] == '\n') { k = 1; j = 81; } else { k = 0; j = 80; } if (r < j) // Åñëè ГҐГ±ГІГј ñâîáîäГ*ûå ìåñòГ* Гў ñòðîêå { if (k == 1) // Ñìîòðèì ГҐГ±ГІГј ëè Гў ýòîé ñòðîêå ГЄГ*ðåòêГ* p = 81 - r; // Ñ÷èòГ*ГҐГ¬ êîëè÷åñòâî ñâîáîäГ*ûõ ìåñò else p = 80 - r; printf("\n%d", k); i = r; // ÏåðåêèäûâГ*ГҐГ¬ Г±Г·ГҐГІГ·ГЁГЄ Г*Г* ïåðâîå ñâîáîäГ*îå ìåñòî ñòðîêè while (p > 1) { str[i] = ' '; i++; p--; } if (k == 1) // Åñëè ГҐГ±ГІГј ГЄГ*ðåòêГ*, ГІГ® ïåðåñòГ*âëÿåì ГҐВё { str[r-1] = ' '; str[80] = '\n'; } } fputs(str, file2); k = 0; } fclose(file); fclose(file2); getchar(); return 0; } //---------------------------------------------------------------------------
Объяснение кода листинга программы
В данном коде выполняется вставка пробелов в файл.
- Создаются две переменные
file
иfile2
, которые используются для работы с файлами. - Переменная
k
инициализируется значением 0, а переменнаяp
пока не используется. - В цикле
while
считывается каждая строка из первого файлаfile
. - В каждой строке подсчитывается количество символов (
r
), и если последний символ строки - это символ новой строки (\n
), то значение переменнойk
меняется на 1, а значение переменнойp
вычисляется как разница между максимальным количеством пробелов, которые можно вставить в строку (81 - r), и текущим количеством пробелов, которые уже вставлены (i). - Если
k
равно 1, то в текущую строку вставляется пробел вместо последнего символа. - После завершения цикла
while
для каждой строки, значение переменнойk
сбрасывается обратно в 0. - Вставленные строки записываются во второй файл
file2
. - После завершения работы с файлами, они закрываются, и программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д