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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 19:56   #1
GoodTimes
 
Регистрация: 10.05.2010
Сообщений: 5
По умолчанию Затруднение при обработке строк

Здравствуйте, уважаемые форумчане, делал себе програмку для личных нужд, все хорошо получалось, но возникла трудность, которую не смог решить, суть проста до безобразия: строка, где встречается искомая комбинация должна быть просто вырезана со всем ее содержимым.

(имеем что-то типа:

просто строка
блаблабла*искомая комбинация*блаблабла
просто строка

надо получить:

просто строка
простро строка )

Код:
 FILE *pF1 = fopen ("input.txt", "rb");
  if ( pF1 )
  {
    FILE *pF2 = fopen("output.txt", "wt");
    if ( pF2 )
    {
      char BuferFrom[1024];
      char BuferTo[1024];
      char StrFind[] = "COMMAND: svchost.exe -i ";  //ИСКОМАЯ КОМБИНАЦ.  
      char StrSwap[] = ""; //ТУТ ВСЯ ЗАГВОЗДКА
      int CurBufToIndex;
      int SwapLen = strlen(StrSwap);
      while ( fgets(BuferFrom, 1023, pF1) )
      {
        CurBufToIndex = 0;
        for (int n = 0; n < 1024 && BuferFrom[n] != '\0'; n++)
          if ( BuferFrom[n] != StrFind[0]  || !IsItFindStr(&BuferFrom[n], StrFind) )
            BuferTo[CurBufToIndex++] = BuferFrom[n];
          else
          {
            for (int m = 0; m < SwapLen; m++)
              BuferTo[CurBufToIndex++] = StrSwap[m];
            n += (strlen(StrFind)-1);
          }
        BuferTo[CurBufToIndex-2] = '\n';
        BuferTo[CurBufToIndex-1] = '\0';
        fputs(BuferTo, pF2);
      }
      fclose (pF2);
    }
    fclose (pF1);
  }
заранее благодарю откликнувшихся за помощ.
GoodTimes вне форума Ответить с цитированием
Старый 15.06.2010, 22:25   #2
Assemblerru
Форумчанин
 
Регистрация: 28.01.2010
Сообщений: 224
По умолчанию

у тебя реально какойто гемор.
1 если в строке (А) необходимо найти первое вхождение строки (В) то я пользуюсь методоом
A = Stroka.Pos ("искомая комбинация");//переменная Stroka типа AnsiString или String

данный метод венет кол=во символов от парвой буквы иначе если не найдет то венет 0

если нужно удалить то другим методом
StokaNyznaia = Stroka.Del (A, 19);

Это удалит из строки Stroka с позиции А, 19 символов
всему свое время как зиме и весне
и каждому солнцу свой неба кусок
Assemblerru вне форума Ответить с цитированием
Старый 15.06.2010, 22:41   #3
GoodTimes
 
Регистрация: 10.05.2010
Сообщений: 5
По умолчанию

Не могли бы вы предоставить кусочек кода, ибо мозг плавится уже, целый день мучаюсь с этим, спасибо.
GoodTimes вне форума Ответить с цитированием
Старый 15.06.2010, 22:47   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Assemblerru, вы уверены что у ТС билдер?
ТС используйте strstr
если в строке нет искомой подстроки то вернет NULL иначе вернет указатель на первый символ подстроки(ну естественно внутри строки в которой искали)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.06.2010, 23:06   #5
GoodTimes
 
Регистрация: 10.05.2010
Сообщений: 5
По умолчанию

Пытаюсь разобраться с вашими подсказками, пока бесполезно, но пытаюсь, спасибо
GoodTimes вне форума Ответить с цитированием
Старый 16.06.2010, 17:23   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
    std::string combination = "olololo";
    std::string str         = "asdolololoasd";
    str.replace( str.find( combination ), combination.length(), "" );
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 16.06.2010, 18:00   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от GoodTimes Посмотреть сообщение
Пытаюсь разобраться с вашими подсказками, пока бесполезно, но пытаюсь, спасибо
собственно, пример:
Код:
	char str[] = "Hello, World! =)";
	const char* pat = ", World";

	char* res = strstr (str, pat);

	for (char* it = res + strlen (pat); *it != '\0'; ++it, ++res )
		*res = *it;
	*res = '\0';
В целом, если есть возможность использовать STL, то согласен с ozo, действительно удобней будет воспользоваться классом std::string, только использовать replace излишне, для удаления последовательности существует метод erase, вызов такой же, как ozo использовал в replace, но без последнего параметра

Последний раз редактировалось netrino; 16.06.2010 в 18:03.
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при обработке функции класса "missing type specifier - int assumed" askerpro Общие вопросы C/C++ 8 02.06.2010 23:09
Тривиальное затруднение GoodTimes Общие вопросы C/C++ 2 10.05.2010 22:28
Помогите обосновать применения метода наименьших квадратов при обработке многолетних рядов Алексей DFG Помощь студентам 1 12.12.2009 20:06
Использование процедур(функций) при обработке экономической информации (delphi) Shadow_rus Помощь студентам 2 12.12.2009 18:11
Ошибка при обработке StringGrid + использование XPManifest noname_06 Общие вопросы Delphi 3 18.01.2009 20:52