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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2009, 15:47   #1
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию Поиск с заменой!

Даны три строки. Нужно заменить все вхождения второй строки в первую на третью строку. Пока вот что получилось.

Функция поиска второй строки в первой. Но теперь две проблемы. Нужны все вхождения второй в первой заменить на третью, а здесь ищет первое вхождение. Вторая как совершить замену,это уже не так сложно, поэтому помогите с первой, можно и со второй.

Код:
int poisk(char *str,char *str2){
	int a=0,b=0,i,j,c=1;
	while(str[a++]);
	a-=1;
	while(str2[b++]);
	b-=1;
	if(a==1){
		if(str[0]==str2[0]){
			return 1;
		}
	}
	if(b==1){
		for(i=0;i<a;i++){
			if(str[i]==str2[0]){
				return 1;
			}
		}
	}
	for(i=0;i<a;i++){
			if(str2[0]==str[i]){
				for(j=1;j<b;j++){
					if(str[i+j]==str2[j]){
						c++;
						if(c==b){
							return 1;
							break;
						}
					}else{
						c=1;
						i=j;
						break;
					}
				}
			}
		}
	return -1;
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.
MAKEDON вне форума Ответить с цитированием
Старый 15.04.2009, 22:02   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

А использовать стандартные фукции для работы со строками нельзя?
Тогда первую часть можно так сделать
Код:
//поиск позиции подстроки в строке, начиная с позиции n
int strstr_cnt(const char *Src,const char *Sub, const int n)
{
  int len = 0, len_sub = 0;
  while(Src[len++]);
  len-=1;
  while(Sub[len_sub++]);
  len_sub-=1;

  for(int i=n; i<len; i++)
  {
    if(Sub[0]==Src[i])
    {
	bool is = true;
	for(int j=0; j<len_sub; j++)
	if(i+j<len)
	{
       if(Sub[j]!=Src[i+j]) is=false;
	}
	else is=false;

	if(is) return i;
    }
  }
  return -1;
}
int main()
{
  char* A = "12A12A45A";
  char* B = "2A";

  int len_sub = 0;
  while(B[len_sub++]);
  len_sub-=1;

  int i = strstr_cnt(A, B, 0);
  while(i!=-1)
  {
	  //+замена
	  i=strstr_cnt(A, B, i+len_sub-1);	  	  
  }
  return 0;
}
Svetlag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с заменой битов. Нужна помощь! Solma Фриланс 9 07.12.2008 22:48
Поиск в БД Karinka БД в Delphi 9 07.12.2008 16:25
ПРОБЛЕМА с заменой символов в ячейке с помощью кода VBA Maxx Microsoft Office Excel 5 11.11.2008 16:42
Поиск MAKEDON Общие вопросы Delphi 2 22.02.2008 22:47
Поиск Andr Microsoft Office Excel 2 18.07.2007 11:49