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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2011, 07:22   #1
Бинари
Пользователь
 
Регистрация: 23.09.2011
Сообщений: 17
По умолчанию [C++]Добавление к каждой заданной подстроке другой заданной подстроки

Я попытался исправить программу, но стало работать только хуже. Привожу весь код с просьбой помочь найти ошибку.

Код:
int BoyerMooreHorspool(char *haystack, char *needle)
{
	int i,j,k, needle_len = 0,haystack_len = 0;
	int needle_table[256];

	for (char *p = needle; *p; *p++)
		++needle_len;
	for (char *p = haystack; *p; *p++)
		++haystack_len;

	if (needle_len < haystack_len)
	{
		for (i = 0; i < 256; i++)
			needle_table[i] = needle_len;

		for (i = 1; i < needle_len; i++)
			needle_table[needle[i-1]] = needle_len-i;

		i = needle_len;
		j = i;

		while (j > 0 && i <= haystack_len)
		{
			j = needle_len;
			k = i;
			while (j > 0 && haystack[k-1] == needle[j-1])
			{
				--k;
				--j;
			}
			i+=needle_table[haystack[i-1]];
		}

		if (k > haystack_len - needle_len)
			return 0;
		else return k+needle_len;
	}
	else return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL,"");

	int xl = 0,yl = 0;
	char x[255],y[255],z[255];
	cout << "Введите строку\n";
	gets(x);
	cout << "Введите подстроку\n";
	gets(y);
	int k = BoyerMooreHorspool(x,y);
	if (!k)
		cout << "Такой подстроки не существует\n";
	else
	{
		cout << "Введите другую заданную подстроку\n";
		gets(z);
		int zlen = 0;
		for (char *p = z; *p; *p++)
			++zlen;
		for (char *p = x; *p; *p++)
			++xl;
		char newstr[255],helpstr[255];
		int i,j, m, iter = 1;
		while (k)
		{
		for (i = 0,j=0; i < k; i++)
			newstr[j++] = x[i];
		for (i = 0, j= k; i < zlen; i++)
			newstr[j++] = z[i];
		for (i = k, j = k + zlen; i < xl; i++)
			newstr[j++] = x[i];
		newstr[j] = '\0';
		m = BoyerMooreHorspool(x+zlen*iter,y);
		m ? k += m : k = m; 
		}
		cout << newstr << endl;
	}

	return 0;
}

Последний раз редактировалось Бинари; 25.10.2011 в 07:38.
Бинари вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисления с заданной точностью DemonPro Паскаль, Turbo Pascal, PascalABC.NET 0 20.10.2011 17:04
[C++]Добавить подстроку к каждой заданной подстроке Бинари Помощь студентам 1 14.10.2011 07:40
посчитать с заданной точностью strateg66 Помощь студентам 1 16.11.2009 00:00
Си. Вычисления с заданной точностью. DedSero Помощь студентам 0 03.11.2009 11:08