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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
#1

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

25.07.2009, 00:33. Просмотров 2008. Ответов 11
Метки нет (Все метки)

Здравствуйте, подскажите каким алгоритмов пользуетесь вы для решения подобной задачи.
Есть файл с любой информацией. Нужно эту информацию модифицировать. То есть найти некоторые символы и заменить их на строки.
Для примера при переводе в HTML заменить "<" на &lt;
У меня получается, постоянно сдвиги табуляций если они есть или просто коряво как-то все выходит.
Если можно словами алгоритм.
Спасибо.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2009, 00:33
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена символов строками (C++):

Замена символов в фвйлах - C++
Здравствуйте, столкнулся с проблемой. Есть 2100 файлов, в них произвел несовсем корректную замену. Всвязи с этим возникла сладующая...

Работа с символьными строками - вставка символов - C++ Builder
Задача: ввести любые символы в Edit1. Если попадается знак '!', то поставить перед ним и после него пробел. Вывести результат в Edit2. ...

Замена символов. - C++ Builder
Есть TStringList *a Нужно поменять все пробелы на плюсы. Вопрос простой, но используя Pos, Delete и так далее алгоритм становится...

Замена символов - C++ Builder
Есть очень хороший код который заменит символы а на о в эдите1: Edit1-&gt;Text = StringReplace(Edit1-&gt;Text, &quot;a&quot;, &quot;o&quot;,TReplaceFlags() &lt;&lt;...

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

Замена символов в AnsiString - C++ Builder
Привет всем! Помогите разобраться.. Нужно заменить в строке AnsiString символы \r\n на &amp; Делаю так: void __fastcall...

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

Для замены одной последовательности на другую, происходит не посимвольно считывание, а считывание всей строки... поиска последовательности в ней. Если не обнаружена замена - записывае строку в файл-приемник, если обнаружена записываемя информацию до заменяемой последовательно во временную строку, добавляем вконец временной строки замену, добавляем в конец временной строки все что было после заменяемой вставки. Записываем в файл-приемник временную строку.
0
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();
Думаю сойдет. Если есть еще варианты, буду рад.
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
25.07.2009, 01:23 #4
Цитата Сообщение от TGrey[WoLf
;224466]while( ! input.EOF() )
замени на
C++
1
while(input)
так как помимо признака окончания файла могу теще возникнуть ошибки. а while(input) проверяет на активность флагов ошибок, окончания файла и т.д.
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
25.07.2009, 01:45  [ТС] #5
Хмм интересно спасибо, запомню. А где это описывается?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
25.07.2009, 11:18 #6
TGrey[WoLf], всмысле описывается? ну я это вычитал по-моему в книги Р.Лафоре "ООП"... но по-моему встречал еще где-то
0
TGrey[WoLf]
39 / 39 / 1
Регистрация: 14.09.2008
Сообщений: 685
25.07.2009, 12:46  [ТС] #7
Ну я это и имел ввиду, где ты это прочитал.
0
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
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2009, 23:19 #9
[QUOTE=Monte-Cristo;224479]замени на
C++
1
while(input)
а read (глагол) замени на ch или что-нибудь не похожее на имя функции. зачем себе и другим голову зря дурить?
0
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
31.07.2009, 23:31 #10
Цитата Сообщение от novi4ok Посмотреть сообщение
а read (глагол) замени на ch или что-нибудь не похожее на имя функции. зачем себе и другим голову зря дурить?
а кто кого дурит?
0
novi4ok
551 / 504 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
01.08.2009, 20:07 #11
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а кто кого дурит?
оно нас. в принципе никто не запрещает переменную char назвать getChar, но зачем?

погуглите на "how to write unmantainable code", когда-то попадалась интересная статья с похожим названием.
1
Monte-Cristo
2789 / 1375 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
02.08.2009, 14:10 #12
Цитата Сообщение от novi4ok Посмотреть сообщение
оно нас
оно ВАС не дурит. а если так кажется, не верьте. ВАС никто не заставляет.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2009, 14:10
Привет! Вот еще темы с ответами:

Замена символов в строке - C++ Builder
Подскажите пожалуйста, каким образом можно заменить символы в строке! Например: Исходная строка: Привет, Анна. Должно...

Замена символов в текстовом поле - C++ Builder
Привет! Что я делаю неправильно? AnsiString newText = &quot;Guk15&quot;; Edit1-&gt;Text = &quot;C:\Guk13\Korr\Haus\GBW\Ablesung_2008.pdf&quot; ; ...

Работа со строками (замена символов) - C++
Даны две строки. Удалить из каждой из них символы, отсутствующие в другой

Работа со строками. Замена символов - C++
Всем привет. Вот полное задание: &quot;Введи с клавиатуры 3 строки в самой длинной поменяй первое слово с последним и выведи, а в самой короткой...


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

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

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