Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2011, 19:32   #1
unior_C++
Новичок
Джуниор
 
Регистрация: 03.11.2011
Сообщений: 2
Восклицание обробка текстового файла

Привет всем! Помогите решить задачку Исключить из файла комментарии, Которые взятые в символы '/ *' и'*/', а результат сохранить в файле с таким же названием, как у входного но расширением ". Tmp", разрешены вложенные комментарии.Результат вывести на экран .

Незнаю как удалить симолов из строки которые взять в комментарии! кто может подсказаты как???
как удалить символы от одного символа до другого! (
unior_C++ вне форума Ответить с цитированием
Старый 03.11.2011, 20:30   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Да тут можно проще. Заводишь счетчик вложенности комментариев, присваиваешь ему ноль. Потом посимвольно читаешь из первого файла и сразу записываешь во второй, пока не встретишь /*; встретишь - увеличиваешь счетчик на единицу, и дальше читаешь не записывая, пока не встретишь */; уменьшаешь счетчик на единицу.
Son Of Pain вне форума Ответить с цитированием
Старый 03.11.2011, 20:49   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Сначало найти индексы/позицию первого вхождения строки "/*" и "*/" в тексте, затем удалить от первой метки до второй. В цикле повторять, потом сохранять в файл
Код:
#include <iostream>
#include <string>
#include <iterator>
#include <fstream>
#include <algorithm>

int main()
{
   std::string filename, text;
   std::cout << "Input file name: ";
   std::cin >> filename;
   std::ifstream in(filename.c_str());
   std::copy(std::istreambuf_iterator< char>(in), std::istreambuf_iterator< char>(), std::inserter(text, text.begin()));
   for (int index = text.find("/*"); index != std::string::npos; index = text.find("/*"))
      text.erase(index, text.find("*/") + 2 - index);
   filename.erase(filename.find_last_of("."));
   std::ofstream out((filename+".Tmp").c_str());
   std::copy(text.begin(), text.end(), std::ostreambuf_iterator< char>(out));
   return 0;
}
An1ka вне форума Ответить с цитированием
Старый 03.11.2011, 21:21   #4
unior_C++
Новичок
Джуниор
 
Регистрация: 03.11.2011
Сообщений: 2
По умолчанию

большое спасибо)
unior_C++ вне форума Ответить с цитированием
Старый 03.11.2011, 21:28   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

An1ka, я думаю, что Вы /*в некотором смысле /*и если */не /*брать в расчёт такой возможноти,*/*/ правы.
Abstraction вне форума Ответить с цитированием
Старый 04.11.2011, 01:05   #6
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
Подмигивание

Цитата:
Сообщение от Abstraction Посмотреть сообщение
An1ka, я думаю, что Вы /*в некотором смысле /*и если */не /*брать в расчёт такой возможноти,*/*/ правы.
Компилятор с такими комментариями бы вас не понял
В таком случае тут нужен еще цикл или рекурсия для поиска всех вложенных:
Код:
#include <iostream>
#include <string>
#include <iterator>
#include <fstream>
#include <algorithm>
 void delsub(std::string& str, int posbegin)
{
	int end, beg = posbegin;
	do {
		posbegin = beg;
		beg = str.find("/*",posbegin+1);
		end = str.find("*/",posbegin+1);
	} while ( beg < end && beg != std::string::npos);
	str.erase( posbegin, end - posbegin + 2);
}
int main()
{
   std::string filename, text;
   std::cout << "Input file name: ";
   std::cin >> filename;
   std::ifstream in(filename.c_str());
   std::copy(std::istreambuf_iterator< char>(in), std::istreambuf_iterator< char>(), std::inserter(text, text.begin()));
   for (int index = text.find("/*"); index != std::string::npos; index = text.find("/*"))
      delsub( text, index);
   filename.erase(filename.find_last_of("."));
   std::ofstream out((filename+".Tmp").c_str());
   std::copy(text.begin(), text.end(), std::ostreambuf_iterator< char>(out));
   return 0;
}
An1ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Из текстового файла в бд!!! Poltev86 БД в Delphi 5 16.05.2010 23:18
Memo - обробка текста sv2311 Помощь студентам 0 25.04.2009 17:42
считывание с текстового файла ciaonataha Помощь студентам 0 20.04.2009 12:09
Шифрование текстового файла pomoshnic Паскаль, Turbo Pascal, PascalABC.NET 5 14.02.2009 18:21
Мониторинг текстового файла zander Microsoft Office Excel 20 14.02.2009 01:34