IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Прямой алгоритм поиск. СИ
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Женский
Реальное имя: Сафиуллина Алёна

Репутация: -  1  +


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


--------------------
Жизнь похожа на собачью упряжку: если не идёшь впереди, то всё время видишь одно и то же...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Говорила мне мама - не пиши на С, проблемы на пустом месте возникают. pc1 надо увеличивать в другом месте:

while(*pc1)
{
char *p = pc1;
char *pc2 = c2;
while((*p != 0) && (*pc2 != 0) && (*p++ == *pc2++));

if(!(*pc2)) printf("%d\n", (pc1 - c1));

pc1++; /* <--- Вот тут */
}
, тогда должно сработать. Проверь, у меня сейчас компилятора С-шного под рукой нет...

Цитата
И можно пояснить, что значит рс1 и рс2?
Можно, это временные указатели на строку. Чтобы сравнивать подстроки между собой - можно воспользоваться тем способом, как это делается в Паскале (что продемонстрировал Lapp) - т.е., обращаться к символу по индексу, а можно сделать в духе С, используя указатель на строку... То есть:
Цитата
        char *p = pc1;  // начинаем просмотр с текущего места основной строки
char *pc2 = c2; // и с начала подстроки

// пока не дошли до конца строки и не дошли до конца подстроки,
// и очередные символы равны между собой - продвигаемся в обеих
// строках дальше
while((*p != 0) && (*pc2 != 0) && (*p++ == *pc2++));
, а потом достаточно сравнить *pc2 с нулем, чтобы понять, нашли мы полное вхождение подстроки в строку, или частичное. Если там 0 - значит, полное, пробежали до конца подстроки, можно выводить номер позиции...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.05.2024 10:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name