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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2017, 19:24   #1
adolphina
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 28
По умолчанию поиск подстроки в строке методом грубой силы

Добрый день. Помогите пожалуйста написать программу поиска подстроки в строке методом грубой силы.
В учебнике нашла псевдо код, записала его, но не до конца понимаю его логику + он не работает.
Нужно вывести позицию первого вхождения подстроки в строку. Например, если введено:
qwerty
we
То должна вывести 1.
Cам код:

Код:
#include <iostream>
using namespace std;

int main()

{

    char main_s[1000];
    char find_s[1000];
    cout << "Enter main string\n";
    scanf("%s", main_s);
    cout << "Enter string to find\n";
    scanf("%s", find_s);
    int size_m, size_f;
    size_m = sizeof(main_s);
    size_f = sizeof(find_s);

   for (int i=0; i<(size_m-size_f);i++)
    {
        int j=0;
        while ((j<size_f)&(find_s[j]!=main_s[i+j]))
        {
            j++;

            if (j == size_f)
            {
                cout << i;
            }
        }
    }



};
Заранее благодарю за помощь
adolphina вне форума Ответить с цитированием
Старый 25.04.2017, 20:04   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Хорошо протестируй (при разных комбинациях):

Код:
#include <iostream>
using namespace std;

int main()
{
	char main_s[250]="qeywweertywe";
	char find_s[25]="we";
	
	int size_m = 0;
	int	size_f = 0;

	while (main_s[size_m] != '\0')
	{
		size_m++;
	}
	while (find_s[size_f] != '\0')
	{
		size_f++;
	}
	
	if ((size_m - size_f) < 0)
	{
		cout << "(size_m - size_f) < 0\n\n";
	}
	else
	{
		for (int i = 0; i < (size_m - size_f) + 1; i++)
		{
			if (main_s[i] == find_s[0])
			{
				int k = i;
				int kol = 1;
				for (int j = 1; j < size_f; j++)
				{
					k++;					
					if (main_s[k] != find_s[j])
					{
						break;
					}
					kol++;
				}
				if (kol == size_f)
				{
					cout << ">> " << i;
					break;
				}
			}
		}
	}
			
	cin >> main_s;//чтобы консоль не закрывалась
	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 25.04.2017, 20:22   #3
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вот ещё варианчик:

Код:
#include <iostream>
using namespace std;

int main()
{
	char main_s[250]="qeyweewertywee";
	char find_s[25]="wee";
	
	int size_m = 0;
	int	size_f = 0;

	while (main_s[size_m] != '\0')
	{
		size_m++;
	}
	while (find_s[size_f] != '\0')
	{
		size_f++;
	}
	
	if ((size_m - size_f) < 0)
	{
		cout << "(size_m - size_f) < 0\n\n";
	}
	else
	{
		for (int i = 0; i < (size_m - size_f) + 1; i++)
		{			
			int k = i;
			int j = 0;
			while ((main_s[k] == find_s[j]) & find_s[j] != '\0')
			{
				j++;
				k++;
			}
			if (j == size_f)
			{
				cout << ">> " << i;
				break;
			}
		}
	}
			
	cin >> main_s;//чтобы консоль не закрывалась
	return 0;
}
ura_111 вне форума Ответить с цитированием
Старый 25.04.2017, 23:09   #4
adolphina
Пользователь
 
Регистрация: 02.11.2016
Сообщений: 28
По умолчанию

Цитата:
Сообщение от ura_111 Посмотреть сообщение
Вот ещё варианчик:

Код:
#include <iostream>
using namespace std;

int main()
{
	char main_s[250]="qeyweewertywee";
	char find_s[25]="wee";
	
	int size_m = 0;
	int	size_f = 0;

	while (main_s[size_m] != '\0')
	{
		size_m++;
	}
	while (find_s[size_f] != '\0')
	{
		size_f++;
	}
	
	if ((size_m - size_f) < 0)
	{
		cout << "(size_m - size_f) < 0\n\n";
	}
	else
	{
		for (int i = 0; i < (size_m - size_f) + 1; i++)
		{			
			int k = i;
			int j = 0;
			while ((main_s[k] == find_s[j]) & find_s[j] != '\0')
			{
				j++;
				k++;
			}
			if (j == size_f)
			{
				cout << ">> " << i;
				break;
			}
		}
	}
			
	cin >> main_s;//чтобы консоль не закрывалась
	return 0;
}
спосибо
adolphina вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск подстроки в строке С pepsik66 Помощь студентам 10 12.11.2012 19:25
Поиск подстроки в строке Mister.V Общие вопросы Delphi 14 17.12.2011 13:01
Поиск подстроки в строке videolord Общие вопросы по Java, Java SE, Kotlin 2 10.04.2011 09:11
Поиск подстроки в строке valdemar593 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 03.06.2010 21:42
поиск подстроки в строке!!! StoneSour Общие вопросы C/C++ 2 15.03.2010 21:31