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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2009, 19:53   #1
Geremy
Пользователь
 
Аватар для Geremy
 
Регистрация: 31.05.2009
Сообщений: 16
По умолчанию Работа со строками (Си)

Здравствуйте! Во время решения данной задачи возникли вопросы.

Поиск первого вхождения подстроки S1 в строку S. Шаблон функции Pos(S,S1). Оформление в двух вариантах : с помощью массивов и указателей.

Допустим обьявили переменные типа чар S, S1. При интерактивном вводе присвоили им с помощью функции gets(){} символы. Но дальше возникает вопрос , как можно сравнить эти строку и подстроку?И вообще как можно написать функцию Pos(S,S1)?
Спасибо
Geremy вне форума Ответить с цитированием
Старый 04.12.2009, 20:20   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Самый тупой алгоритм:

i - номер текущего символа в S, j - номер текущего символа в S1
1. i = 0; j = 0;
2. Сравнили i и j символы S и S1 соответственно
3. Если не совпадают, то j = 0; переход к 4. Если совпадают, то переход к 5
4. Если i - последний символ S, то нужной подстроки нет. Иначе i++
5. Если j - последний символ S1, то мы нашли нужную подстрочку. Иначе i++; j++

Если хотите, можете алгоритм Кнута-Морриса-Пратта посмотреть, он оптимальнее
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 04.12.2009, 20:27   #3
Geremy
Пользователь
 
Аватар для Geremy
 
Регистрация: 31.05.2009
Сообщений: 16
По умолчанию

Цитата:
Самый тупой алгоритм:

i - номер текущего символа в S, j - номер текущего символа в S1
1. i = 0; j = 0;
2. Сравнили i и j символы S и S1 соответственно
3. Если не совпадают, то j = 0; переход к 4. Если совпадают, то переход к 5
4. Если i - последний символ S, то нужной подстроки нет. Иначе i++
5. Если j - последний символ S1, то мы нашли нужную подстрочку. Иначе i++; j++

Если хотите, можете алгоритм Кнута-Морриса-Пратта посмотреть, он оптимальнее
А как мы можем сравнивать элементы строк , если ввод через gets?
Geremy вне форума Ответить с цитированием
Старый 04.12.2009, 20:31   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

ну вы же строки храните где-то, в каком-нибудь там char *S и char *S1
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 04.12.2009, 20:43   #5
Geremy
Пользователь
 
Аватар для Geremy
 
Регистрация: 31.05.2009
Сообщений: 16
По умолчанию

Допустим строки хранятся в переменных , а как сравнивать каждый элемент этих переменных?
Geremy вне форума Ответить с цитированием
Старый 04.12.2009, 21:46   #6
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
if (S[i] == S1[j]) ...
или
Код:
if (*(S+i) == *(S1+j)) ...
Советую почитать про представление строк в C
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками Андрей.12 Помощь студентам 7 29.11.2009 19:24
Работа со строками JeyKip Общие вопросы C/C++ 2 10.10.2009 18:41
работа со строками lg12 Помощь студентам 8 17.08.2009 10:07
Работа со строками в С++ Алекс...))) Помощь студентам 1 04.02.2009 19:48