Консультация № 68674
26.12.2006, 17:19
0.00 руб.
0 3 3
Здравствуйте, уважаемые эксперты.
Мне дан текстовый файл, "1.txt", например. В нем записана некоторая последовательность цифр, цифры по значению не больше восьми.
Мне надо в этом файле заменить каждую цифру на цифру по значению на единицу больше 0->1, 1->2 ... 8->9.
Реализовать не используя вспомогательного файла, т.е. я должен прочесть символ-цифру из текста и на следующем шаге записать в файл необходимый символ на место старого. И так пока не конец файла.
Как это реализовать на C?

Обсуждение

Неизвестный
26.12.2006, 17:48
общий
это ответ
Здравствуйте, Werebear!

Для открытия/чтения строки/записи строки/закрытия файла используются функции fopen()/fgets()/fputs()/flose().

Для возврата на старое место записи можно использовать фунции:
ftell() для того что бы выяснить текущий указатель чтения/записи файла,
fseek() для установки указателя чтения/записи в нужное место.

Для увеличения цифры, можно не пребразовывать ее, так как в С подобное работает:
char a = ‘0‘;
a = a + 1; /* a == ‘1‘ */

Удачи! Ж:-)
Неизвестный
26.12.2006, 20:29
общий
это ответ
Здравствуйте, Werebear!

Программа на "чистом" C, как ты и просил, без доп. массивов и файлов.
Имя файла передаётся через командную строку.
В двух словах о работе. Считываем символ. Если это цифра, то увеличиваем её на единицу. Смещаем курсор файла назад на один символ и перезаписываем цифру новым значением. Обрати внимание, что после каждой записи вызывается flush для сброса файла на диск. Без него не работает, я так и не понял, почему. Может быть, кто-нибудь объяснит?


Приложение:
#include <stdio.h>#include <ctype.h>int main(int argc, char* argv[]){ FILE* file; int ch; if (argc != 2) return 1; file = fopen(argv[1], "r+"); if (file == NULL) return 1; while (!feof(file)) { ch = fgetc(file); if (isdigit(ch)) { ++ch; fseek(file, -1, SEEK_CUR); fputc(ch, file); fflush(file); } } return 0;}
Неизвестный
26.12.2006, 21:36
общий
это ответ
Здравствуйте, Werebear!
Открываешь файл как на запись так и на чтение.
Запоминаешь позицию указателя в файле (ftell).
Параметр для fopen - r+b или r+t.
Считываешь знаки цифры, переводишь их в число (atoi),
увеличиваешь число на единицу.
запоминаешь новую позицию указателя в файле (ftell).
Возвращаешься на старую позицию, записываешь
вычисленное число. Переходишь на новую позицию.
И так в цикле до конца файла, пока не кончаться числа.
Трудности могут возникнуть, если считанное и вычисленное число
состоят из разного количества цифр
(напр. 9(1 цифра), следующая -10(2 цифры))
Это тоже нужно отслеживать.
Удачи.
Форма ответа