Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 72, средняя оценка - 4.65
mashinist
1 / 1 / 0
Регистрация: 14.02.2009
Сообщений: 28
#1

Функция поиска вхождения строки в заданную строку в С - C++

14.02.2009, 23:55. Просмотров 8868. Ответов 6
Метки нет (Все метки)

получил в универе такое задание
Функция - Findwords(s,s1). Назначение - поиск вхождения в строку s заданной фразы (последовательности слов) s1.
В общем задание написать эту функцию, по началу вроде бы несложно, но потом препод сказал что возвратить надо строку:
К примеру имееться строка s="Привет Андрей Васильевич";
s1="Привет Андрей"
вывести тогда надо "Привет Андрей";
но если такая ситуация s="Привет Андрей Васильевич"
а s1="Приветствую вас Андрей"
то вывести надо совпадающее Андрей...
то беж как бы не только проверить сходство и наличие, но и по частям тоже...

я тут ломал голову пару дней, но так и не смог ничего выдумать и написать может сможет кто то помочь?

смогу в крайнем случае скинуть немного денег на вм за помощь)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2009, 23:55     Функция поиска вхождения строки в заданную строку в С
Посмотрите здесь:
Ввести строку текста и строку поиска, найти местоположение первого вхождения строки поиска в строку текста C++
Найти индекс последнего вхождения символа, введённого пользователем, в заданную строку C++
C++ Определить позицию первого вхождения в заданную строку какого-либо символа
Функция поиска первого вхождения шаблона в текст C++
Найти координаты первого вхождения в заданную строку подстроки, состоящей из двух одинаковых заданных символов C++
Процедура, позволяющая определить позицию первого вхождения в заданную строку какого-либо символа из второй C++
C++ Дан символ C и строки S, S0. После каждого вхождения символа C в строку S вставить строку S0
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
15.02.2009, 01:13     Функция поиска вхождения строки в заданную строку в С #2
могу подсказать алгоритм... все вполне просто... берешь любую строчку.. допустим *s без разницы какую... входишь в цикл размером с эту строку. Берешь s[i] букву далее создаешь еще один цикл по второй строке... сравниваешь s[i] и s1[j]. если они равны int k=1. идешь дальше по циклу второй строки только сравниваешь уже s[i+k] и s1[j]. И так шагаешь до пробела или пока s[i+k] и s1[j] не будут разными.

Пробел - вырубаешь оба цикла... ну там еще предварительно в первом цикле перед запуском второго создаешь какую нибуть строку (*s2 например) и в нее записываешь все значения, которые равны (s2[k]=s2[k+i] допустим) эта строка и будет искомым.

Если не равны - чистишь *s2 и вырубаешь 2й цикл. и.т.д если не понятно что-нибудь - спрашивай
mashinist
1 / 1 / 0
Регистрация: 14.02.2009
Сообщений: 28
15.02.2009, 09:30  [ТС]     Функция поиска вхождения строки в заданную строку в С #3
дело в том, что слова могут совпасть и после пробела... и тогда будет кусок строки.. а как его объединить.. я хз...
да и тут как это все описать голова кругом идет...
мне вот вчера немного подсказали посмарите...
char ** m = //массив из слов из строки s
char ** m1 = //массив из слов из строки s1
int first;
int count;
int exit=0;
for (i=0;i<длина(м);i++) //сначала сравниваем всю строку, потом пропускаем первые слова
{
for (j=0;j<длина(m1);j++)//пытаемся начинать со всех слов втророй строки
{
if (strcmp(m[i],m1[j])==0)//начало совпадения
{
first=j;
{
for(k=0;длина(m)-i;k++)
{
if (strcmp(m[i],m1[j+k])==0)
{
count++;
}
else
{
exit=0;
break;
}
}
}
if (exit) break;
}
if (exit) break;
}
ну перед этим еще счиатть строку в массив по словам... тоже мучаться...

Правильно ли это? и как потом если получим 2 слова их в порядке что они идут записать в строку новую которую мы возвращаем
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
15.02.2009, 12:27     Функция поиска вхождения строки в заданную строку в С #4
это довольно сложно...

если нужно не до пробела, тогда в моем варианте записываешь значение k в какуюнить еще переменную(l) (правда k придется объявить до циклов) и идешь дальше до следующего пробела или разных значений пробел - опять записываешь k в l
если различные значения, то k=l вырубаешь циклы (это если l!=0, если равна, то продолжаешь дальше сравнивать только обнули k). а s2 выводишь до номера k или, если хочешь, чистишь ее после k.

да.. к стати еще начинаешь второй цикл, если s[i-1]=' ' или если i=0. Во втором тоже лучше проверить так как первое слово может быть Андрей, а второе - ПриветАндрей

Добавлено через 5 минут 36 секунд
хотя может и твой вариант полегче, просто я не могу въехать))
mashinist
1 / 1 / 0
Регистрация: 14.02.2009
Сообщений: 28
15.02.2009, 21:45  [ТС]     Функция поиска вхождения строки в заданную строку в С #5
сеня был 3 день мучений))
вышел лишь кал а не код((

Так что если кто может помочь я вас оч прошу)
profflord
Сообщений: n/a
23.02.2009, 18:17     Функция поиска вхождения строки в заданную строку в С #6
получил такое задание
Функция -LastPos (s,s1). Назначение - поиск последнего вхождения в строку s заданной фразы

Помогите, пожалуйста, как решить эту проблемку....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2009, 20:06     Функция поиска вхождения строки в заданную строку в С
Еще ссылки по теме:
Заменить все вхождения строки s2 в строку s1 на строку s3 C++
C++ Процедура поиска вхождения одной строки в другой
C++ Функция: замена подстроки в строке на заданную строку
C++ Функция копирует строку в другую строку заданой длины и помещает текст первой строки по центру второй строки
Своя функция lastpos (поиск последнего вхождения подстроки в строку) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.02.2009, 20:06     Функция поиска вхождения строки в заданную строку в С #7
через strstr мотаешь пока она не перестанет находить, адрес каждой найденной подстроки сохраняешь, а инициализируешь его вначале нулевым указателем, а мотать - это начинать новый поиск с первого символа после найденного
Yandex
Объявления
23.02.2009, 20:06     Функция поиска вхождения строки в заданную строку в С
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru