Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
#1

Редактирование строки - C++

24.01.2009, 18:52. Просмотров 1106. Ответов 3
Метки нет (Все метки)

Нужно редактировать текстовый файл таким образом:
у нас есть определенное кол-во символов,которое может быть в строке(можно определить define'ом,пусть будет N)
и нужно сделать так,чтобы в строке в файле(уже в получившемся) было не более N символов,причем если слово обрывается,то его нужно поместить в следующую строку без пробела(может быть в файле много пробелов).
Кодировка может включать русские или английские символы(Как тогда с кодом EOF,который совпадает с кодом "я"?)
Напр.,исходный файл такой(N = 16)

(см. во вложениях)

А должен получиться такой файл(при N = 15):


********************
Литература,
музыка,
изобразительное
искусство
только в том
случае имеют
право на
существование,
если
способствуют
нравственному
perfection
человека.
********************

Вообще,в задаче требуется,чтобы N = 54.Просто придумать такой пример неохота.
И имена файлов через командную строку должны передаваться(sourc file и destination file)


Алгоритм черновой плавает в голове: мы должны сначала идти по файлу,и если число символов нацело делится на N,то идем в обратном порядке,пока не встретится пробел,затем пока не встретится какой-л. др. символ(так мы все лишние пробелы уберем),затем fprintf или fwrite записываем '\n',предварительно проверив,достигается ли начало строки.
Только не знаю ,как идти в обратном порядке в файле(как это организовать)

p.s. ************ - так я отметил для удобства границы файла ))
Вложения
Тип файла: txt Текстовый документ.txt (193 байт, 33 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2009, 18:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Редактирование строки (C++):

Редактирование строки - C++
Здравствуйте, ребят. Не буду вас мучить сегодня. Только один вопрос: У меня есть очень длинная строка std::string. Мне нужна возможность...

Удаление и редактирование определённой строки - C++
Задание- словарь синонимов, в нём нужно осуществить удаление и редактирование определённой строки в файле в m1 находит синоним, в m2 -...

Редактирование строки. В строку дозаписывается мусор - C++
Есть программа, которая заменяет в строке "ph" на "f", а "ed" на "ing". Программа работает. Но если выводить, вконце вписывает некое...

Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки - C++
Сгенерировать две произвольные строки и определить, является ли какое-либо слово первой строки частью второй строки. 1. Я дуб дубом,даже...

Добавить строки, начиная со строки К1 и до строки К2, в динамический массив строк - C++
Есть динамический массив строк. Заполняется, т.е. размер его уже известен будет. Но дальше нужно сделать задание: "Добавить строки, начиная...

Удалить строки динамической матрицы, начиная со строки К1 и до строки К2 - C++
Сформировать динамический двумерный массив, заполнить его случайными числами и удалить строки, начиная со строки К1 и до строки К2 вот...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vourhey
Почетный модератор
6478 / 2253 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
25.01.2009, 01:40 #2
Глазами пробежался. Не въехал. По поводу того, как идти в обратном направлении, тебе поможет fseek.
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
25.01.2009, 11:18  [ТС] #3
Тут N равно в обоих случаях 16,просто опечатка.Попробую понятней объяснить:
нужно после определенного кол-ва символов(их коло-во задается в начале программы) записывать в файл '\n' .причем делать это так,чтобы слова не обравались(а если они обрываются,то '\n' записывать перед этим словом)
Может быть,пример не понятен?
Есть у нас файл.В файле такой хаос:

******************************************************************
In earlier centuries the
Antarctic was thought

to be a huge
continent.
******************************************************************


Напр,в программе кол-во символов,после которых нужно записывать перевод строки - 15
(N = 15,т.е. максимальная длина строки).В итоге получается такой файл:

*************
In earlier
centuries the
Antarctic was
thought to be a
huge continent.
*************


In earlier /* здесь 2 слова + пробел между ними = 10 символов (после слова ealier не должно быть пробела).Т.к. слово centuries не помещается в первую строку (10 символов в 1-ой строке ,а слово centuries - 9 символов, 10 + 9 > 15, поэтому делаем перевод строки перед словом centuries */
centuries the /* здесь 13 символов, и Antarctic уже не помещается в эту строку,следовательно,перед ним записываем перевод строки и т.д.,но не забываем, что пробел , который остался между "the" и "Antarctic" убирается.*/
Antarctic was
thought to be a
huge continent.
Проблема в том,что строки могут быть пустыми в середине текста и может быть много пробелов между словами.(на примере этого не видно,т.к. форум автоматически убирает нунужные пробелы и
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.01.2009, 12:51 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
#include <stdio.h>
 
/* как отличить 'я' от EOF */
main()
{
    int c;
    
    for (c = '\0'; c != EOF; ) {
        c = fgetc(stdin);
        if (c != '\n')
            printf("%d\n", c);
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2009, 12:51
Привет! Вот еще темы с ответами:

Редактирование файлов - C++
Здравствуйте) Уж простите, что так с файлами задалбываю, но решил понять эту тему хорошенько) Сейчас хочу задать чисто теоретический...

Редактирование записей - C++
Здравствуйте. Возник вопрос. Есть программа в которую нужно добавлять записи. При необходимости нужно редактировать уже добавленую запись. ...

Редактирование DLL - C++
Вот из-за этого ll-файла постоянно вылезает окошко с надписью mde by sst311212 и кнопкой ок. Может быть кто-нибудь найдет решение.

Редактирование dll - C++
Здравствуйте. Если честно не знаю в какой раздел обратиться. Решил к вам. Для одной из программ (ГИС Панорама) можно устанавливать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.01.2009, 12:51
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru