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

Замена символов строками - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
TGrey[WoLf]
 Аватар для TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
25.07.2009, 00:33     Замена символов строками #1
Здравствуйте, подскажите каким алгоритмов пользуетесь вы для решения подобной задачи.
Есть файл с любой информацией. Нужно эту информацию модифицировать. То есть найти некоторые символы и заменить их на строки.
Для примера при переводе в HTML заменить "<" на &lt;
У меня получается, постоянно сдвиги табуляций если они есть или просто коряво как-то все выходит.
Если можно словами алгоритм.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2009, 00:33     Замена символов строками
Посмотрите здесь:

Работа со строками символов C++
C++ Работа со строками как с массивом символов
C++ Замена в одномерном массиве, работа со строками из нулей и единиц
Работа с символьными строками - вставка символов C++ Builder
Работа со строками. Удаление отдельных символов C++
C++ Работа со строками. Нахождение повторяющихся символов и вывод на экран
C++ Работа со строками символов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
25.07.2009, 00:46     Замена символов строками #2
Если один символ заменить на сочитание какое-нить, тогда так:
1. Открывается исходный файл
2. Открывается файл приемник
3. Читается символ из исходного файла
4. Если символ не заменяемый, он переписывается в приемочный файл, если заменяемые - записывается нужная последовательность.
5. Закрываем файлы.
6. Исходный файл удаляется
7. Приемный файл переименовывается в исходный.

Для замены одной последовательности на другую, происходит не посимвольно считывание, а считывание всей строки... поиска последовательности в ней. Если не обнаружена замена - записывае строку в файл-приемник, если обнаружена записываемя информацию до заменяемой последовательно во временную строку, добавляем вконец временной строки замену, добавляем в конец временной строки все что было после заменяемой вставки. Записываем в файл-приемник временную строку.
TGrey[WoLf]
 Аватар для TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
25.07.2009, 00:58  [ТС]     Замена символов строками #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ifstream input("in.txt");
ofstream out("out.txt");
char read;
while( ! input.EOF() )
{
      input >> read;
      if( read == '>' )
            out << "&gt;";
      else if( .... )
            .....
      ....
      else
            out << read;
}
input.close();
out.close();
Думаю сойдет. Если есть еще варианты, буду рад.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
25.07.2009, 01:23     Замена символов строками #4
Цитата Сообщение от TGrey[WoLf
;224466]while( ! input.EOF() )
замени на
C++
1
while(input)
так как помимо признака окончания файла могу теще возникнуть ошибки. а while(input) проверяет на активность флагов ошибок, окончания файла и т.д.
TGrey[WoLf]
 Аватар для TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
25.07.2009, 01:45  [ТС]     Замена символов строками #5
Хмм интересно спасибо, запомню. А где это описывается?
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
25.07.2009, 11:18     Замена символов строками #6
TGrey[WoLf], всмысле описывается? ну я это вычитал по-моему в книги Р.Лафоре "ООП"... но по-моему встречал еще где-то
TGrey[WoLf]
 Аватар для TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
25.07.2009, 12:46  [ТС]     Замена символов строками #7
Ну я это и имел ввиду, где ты это прочитал.
YurA_280784
Заблокирован
31.07.2009, 11:35     Замена символов строками #8
Вообще если юзнуть возможности CString то мона сделать так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
FILE * f = fopen("fPath","rb+");
fseek(f,0,SEEK_END);
long fLen = ftell(f);
fseek(f,0,SEEK_SET);
char * chBuf = (char *)malloc(fLen);
fread(chBuf,1,fLen,f);
fclose(f);
CString str = (CString)chBuf;
str.Replace('>',"&gt");
f = fopen("fPath","wb+");
fLen = str.GetLength();
fprintf(str.GetBuffer(fLen),1,fLen,f);
fclose(f);
Написал очень просто, никаких там проверок на наличие файла и т.д. при желании мона оснастить прогу, а проект мона делать Консоль с поддержкой MFC ну или в самом MFC
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2009, 23:19     Замена символов строками #9
[QUOTE=Monte-Cristo;224479]замени на
C++
1
while(input)
а read (глагол) замени на ch или что-нибудь не похожее на имя функции. зачем себе и другим голову зря дурить?
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
31.07.2009, 23:31     Замена символов строками #10
Цитата Сообщение от novi4ok Посмотреть сообщение
а read (глагол) замени на ch или что-нибудь не похожее на имя функции. зачем себе и другим голову зря дурить?
а кто кого дурит?
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.08.2009, 20:07     Замена символов строками #11
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а кто кого дурит?
оно нас. в принципе никто не запрещает переменную char назвать getChar, но зачем?

погуглите на "how to write unmantainable code", когда-то попадалась интересная статья с похожим названием.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2009, 14:10     Замена символов строками
Еще ссылки по теме:

C++ Работа со строками символов
Работа со строками. Замена символов C++
C++ Класс для работы со строками (с поддержкой китайских символов)
Создать динамический классовый тип для работы со строками символов C++
с++, работа со строками символов C++

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

Или воспользуйтесь поиском по форуму:
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
02.08.2009, 14:10     Замена символов строками #12
Цитата Сообщение от novi4ok Посмотреть сообщение
оно нас
оно ВАС не дурит. а если так кажется, не верьте. ВАС никто не заставляет.
Yandex
Объявления
02.08.2009, 14:10     Замена символов строками
Ответ Создать тему
Опции темы

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